├── 可视化结果
├── 热力图.png
├── 武汉地区房价水平柱形图.png
├── MongDB房源数据详情.png
├── 武汉各类型房源占比饼状图.png
└── thermalMap.html
├── .idea
├── misc.xml
├── .gitignore
├── inspectionProfiles
│ └── profiles_settings.xml
├── modules.xml
└── code.iml
├── toTxt.py
├── 可视化.py
├── 爬取数据.py
├── README.md
├── add.txt
└── fake_useragent.json
/可视化结果/热力图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Yohmien/crawler/HEAD/可视化结果/热力图.png
--------------------------------------------------------------------------------
/可视化结果/武汉地区房价水平柱形图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Yohmien/crawler/HEAD/可视化结果/武汉地区房价水平柱形图.png
--------------------------------------------------------------------------------
/可视化结果/MongDB房源数据详情.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Yohmien/crawler/HEAD/可视化结果/MongDB房源数据详情.png
--------------------------------------------------------------------------------
/可视化结果/武汉各类型房源占比饼状图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Yohmien/crawler/HEAD/可视化结果/武汉各类型房源占比饼状图.png
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 | # Datasource local storage ignored files
7 | /dataSources/
8 | /dataSources.local.xml
9 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/code.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/toTxt.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import re
4 |
5 | from pymongo import MongoClient
6 |
7 | AK = 'P9ahwxvm4j9GC2n9PhI7swK9VcgZLvsH'
8 | client = MongoClient('localhost', 27017)
9 | db = client.get_database("lianjia2")
10 | col = db.get_collection("loupan")
11 | pipeline = [
12 | {"$match":
13 | {
14 | "type": "住宅",
15 | "price": {"$ne": 0}
16 | }
17 | },#过滤掉房价待定且不是住宅用途的楼盘
18 | # {"$group":
19 | # {
20 | # "_id": "$area1",
21 | # "avgPrice": {"$avg": "$price"},
22 | # "MaxPrice": {"$max": "$price"},
23 | # "detail_place":"$detail_place"
24 | # }
25 | # },
26 | ]
27 | lists = col.aggregate(pipeline)
28 | Note = open('add.txt', mode='w+')
29 | for list in lists:
30 | # print(list["detail_place"])
31 | address =list["detail_place"]
32 | url = 'http://api.map.baidu.com/geocoding/v3/?address={}&output=json&ak={}&callback=showLocation'.format(address,AK)
33 | res = requests.get(url)
34 | # print(res.text)
35 | results = json.loads(re.findall(r'\((.*?)\)',res.text)[0])
36 | if not 'msg' in results.keys():
37 | Note.write("{\"lng\":"+str(results['result']['location']['lng'])+",\"lat\":"+str(results['result']['location']['lat'])+",\"count\":50},\n")
38 | print("{\"lng\":"+str(results['result']['location']['lng'])+",\"lat\":"+str(results['result']['location']['lat'])+",\"count\":50}")
39 |
40 | Note.close()
--------------------------------------------------------------------------------
/可视化.py:
--------------------------------------------------------------------------------
1 | from matplotlib.ticker import MultipleLocator
2 | from pymongo import MongoClient
3 | import matplotlib.pyplot as plt
4 | import matplotlib
5 | import re
6 | #连接MongoDB数据库
7 | client = MongoClient('localhost', 27017)
8 | db = client.get_database("lianjia2")
9 | col = db.get_collection("loupan")
10 | guandao=[{
11 | "$group":{"_id":"$type","num":{"$sum":1}}
12 | }]
13 | lists=col.aggregate(guandao)
14 | print(lists)
15 | num_list1 = []
16 | type1=[]#存放类型
17 | sum1=[]#存放个数
18 | num1=0
19 | for list in lists:
20 | # num_list1.append(list)
21 | print(list)
22 | if (list["_id"]=="商业" or list["_id"]=="商业类"):
23 | num1 += list["num"]
24 |
25 | else:
26 | sum1.append(list["num"])
27 | type1.append(list["_id"])
28 | sum1.append(num1)
29 | name1="商业"
30 | type1.append(name1)
31 | print(sum1)
32 | print(type1)
33 | matplotlib.rcParams['font.sans-serif'] = ['SimHei']
34 | plt.pie(sum1,labels=type1,autopct='%1.1f%%',shadow=False,startangle=150)
35 | plt.title("武汉各类型房源占比")
36 | plt.savefig("武汉各类型房源占比饼状图.png")
37 | plt.show()
38 | #柱形
39 | pipeline = [
40 | {"$match":
41 | {
42 | "type": "住宅",
43 | "price": {"$ne": 0}
44 | }
45 | },#过滤掉房价待定且不是住宅用途的楼盘
46 | {"$group":
47 | {
48 | "_id": "$area1",
49 | "avgPrice": {"$avg": "$price"},
50 | "MaxPrice": {"$max": "$price"}
51 | }
52 | },
53 | ]
54 | lists = col.aggregate(pipeline)
55 | label_list = []
56 | num_list1 = []
57 | num_list2 = []
58 | #获取聚合后的数据并插入label_list ,num_list1,num_list2,用于纵横坐标显示。
59 | for list in lists:
60 | label_list.append(list['_id'])
61 |
62 |
63 | num_list1.append(round(list['avgPrice'], 1))
64 | num_list2.append(list['MaxPrice'])
65 | print(num_list2)
66 |
67 |
68 | matplotlib.rcParams['font.sans-serif'] = ['SimHei']
69 | x = range(len(num_list1))
70 |
71 | #绘制条形图 :条形中点横坐标;height:长条形高度;width:长条形宽度,默认值0.8;label:为后面设置legend准备
72 | plt.figure(figsize=(18,10))
73 | ax = plt.axes()
74 | rects1 = plt.bar(x, height=num_list1, width=0.4, alpha=0.8, color='red', label="平均房价")
75 | rects2 = plt.bar([i + 0.4 for i in x], height=num_list2, width=0.4, color='green', label="最高房价")
76 |
77 | plt.ylim(0, max(num_list2)+8000) # y轴取值范围
78 | plt.ylabel("价格")
79 |
80 | #设置x轴刻度显示值;参数一:中点坐标;参数二:显示值
81 | plt.xticks([index + 0.2 for index in x], label_list)
82 | plt.xlabel("区域",labelpad = 20)
83 | plt.title("武汉地区房价")
84 | plt.legend() # 设置题注
85 |
86 | for rect in rects1:
87 | height = rect.get_height()
88 | plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
89 | for rect in rects2:
90 | height = rect.get_height()
91 | plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
92 | # #显示条形图
93 | plt.savefig("武汉地区房价水平柱形图.png")
94 | plt.show()
--------------------------------------------------------------------------------
/爬取数据.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*
2 | import sys
3 | import time
4 | import random
5 |
6 | import requests
7 | from lxml import html
8 | import re
9 | from pymongo import MongoClient
10 | from fake_useragent import UserAgent
11 |
12 | def get_proxy():
13 | return requests.get("http://127.0.0.1:5010/get/").json()
14 |
15 | def delete_proxy(proxy):
16 | requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
17 |
18 | # import _thread
19 | def get_areas(str):
20 | print('开始')
21 | # 随机头信息
22 | headers = {
23 | 'User-Agent': UserAgent().random
24 | }
25 | # 随机ip
26 | proxy = get_proxy().get("proxy")
27 | proxies = {
28 | 'http:': 'http://{}'.format(proxy),
29 | 'https:': 'https://{}'.format(proxy),
30 | }
31 | url = 'https://wh.fang.lianjia.com/loupan/' + str
32 | try:
33 | requests.packages.urllib3.disable_warnings()
34 | res = requests.get(url, headers=headers, proxies=proxies, verify=False)
35 | context = html.etree.HTML(res.text)
36 | # ul = context.xpath('//ul[@class="resblock-list-wrapper"]') # 获取标签,按页遍历
37 | # for i in ul:
38 | # li=i.xpath('.//li[@class="resblock-list post_ulog_exposure_scroll has-results"]')
39 | ul = context.xpath('//ul[@class="resblock-list-wrapper"]') # 获取标签,按页遍历
40 | # 楼盘列表div[@class="resblock-list-contaner clearfix"]
41 | # /li[@class="resblock-list post_ulog_exposure_scroll has-results"]
42 | for i in ul:# 遍历每一个ul[@class="resblock-list-wrapper"下的每一个li标签
43 | li = i.xpath('.//li[@class="resblock-list post_ulog_exposure_scroll has-results"]')
44 | for y in li:
45 | try:
46 | con= y.xpath('.//div[@class="resblock-desc-wrapper"]')
47 | # 在楼盘列表div[@class="resblock-list-contaner clearfix"]
48 | # /li[@class="resblock-list post_ulog_exposure_scroll has-results"]/ul[@class="resblock-list-wrapper"]
49 | for a in con:#遍历con
50 | dict = {}#字典,存放key,value
51 | dict["area1"] = a.xpath(".//div[@class='resblock-location']/span[1]/text()")
52 | dict["area1"] = "".join(dict["area1"])
53 | # dict["detail_area"] = dict["detail_area"][:]
54 | print(dict["area1"])#地区
55 | dict["title"] =a.xpath(".//div[@class='resblock-name']/a/text()")
56 | dict["title"]="".join(dict["title"])
57 | # dict["title"] = dict["title"][:]
58 | print(dict["title"])
59 | dict["area"] =a.xpath(".//div[@class='resblock-location']/span[2]/text()")
60 | dict["area"] = "".join(dict["area"])
61 | # dict["detail_area"] = dict["detail_area"][:]
62 | print(dict["area"])
63 | dict["detail_place"] = a.xpath(".//div[@class='resblock-location']/a/text()")#
64 | dict["detail_place"] = "".join(dict["detail_place"])
65 | # dict["detail_place"] = dict["detail_place"][:]
66 | print(dict["detail_place"])
67 | dict["type"] = a.xpath(".//div[@class='resblock-name']/span[1]/text()")
68 | dict["type"] = "".join(dict["type"])#为了连接转为字符串
69 | print(dict["type"])
70 |
71 | try:
72 |
73 | dict['square'] = a.xpath('.//div[@class="resblock-area"]//span//text()')
74 | dict['square'] = "".join(dict['square'])
75 | dict['square'] = re.findall(r"\d+-\d+" + "㎡", dict['square'])#正则取值
76 | dict['square'] = "".join(dict['square'])#以”“将列表数据拼接成字符串·
77 |
78 | print( dict['square'])
79 | dict['sum_Price'] = a.xpath('.//div[@class="resblock-price"]//div[@class="second"]//text()')
80 | dict['sum_Price'] = "".join(dict['sum_Price'])
81 | dict['sum_Price'] = re.findall(r"\d+\.?\d+" , dict['sum_Price'])
82 | dict['sum_Price'] = "".join(dict['sum_Price'])
83 | print( dict['sum_Price'])
84 | except Exception as e:
85 | dict['square'] = ""
86 | dict['price'] = a.xpath('.//div[@class="resblock-price"]//div[@class="main-price"]//span[1]//text()')[0]
87 |
88 | #价格待定的楼盘设置price为0
89 | if dict['price']=='价格待定':
90 | dict['price'] = 0
91 |
92 | dict['sum_Price'] = 0
93 | dict['price']=float( dict['price'])
94 | if dict['square'] == None:
95 | dict['square'] = 0
96 |
97 | list = []
98 | list.append(dict)
99 | client = MongoClient(host='localhost', port=27017)
100 | db = client.get_database("lianjia2")
101 | col = db.get_collection("loupan")
102 | col.insert_many(list)
103 | time.sleep(random.randint(1, 5))
104 | except Exception as e:
105 | print(res.text)
106 | print(url)
107 | print( 'ooops! connecting error, retrying.....')
108 |
109 | sleeptime = random.randint(30, 35)
110 | print("睡眠了%d秒" %sleeptime)
111 | time.sleep(sleeptime)
112 | except requests.exceptions.ProxyError as e:
113 | delete_proxy(proxy)
114 |
115 | if __name__ == '__main__':
116 | # 遍历的页数
117 | for i in range(1, 48):
118 | print("正在爬取第%d页" % i)
119 | get_areas("pg" + str(i))
120 | print("任务完成")
121 | print("爬完")
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 使用方法
2 | 文件说明:
3 | + add.txt:房源经纬度数据
4 | + fake_useragent,json:随机ua列表
5 | + readme.md:说明文件
6 | + thermalMap.html:热力图网页
7 | + toTxt.py:将MongDB的房源地址数据转换成经纬度,并存入add.txt中
8 | + 可视化.py:将MongDB的房源数据进行数据分析,并可视化为武汉各类型房源占比饼状图、武汉地区房价水平柱形图
9 | + png:结果图片文件
10 | + 爬取数据.py:爬取武汉链家房源数据,共729个房源数据
11 |
12 | 自行准备好运行环境,如下:
13 | + 启动MongDB服务以及Redis服务
14 | + 安装依赖
15 | + 运行 proxy_pool 开源库:[jhao104/proxy_pool: Python爬虫代理IP池(proxy pool) (github.com)](https://github.com/jhao104/proxy_pool) 获取随机ip
16 |
17 | 运行顺序:
18 | + 爬取数据(爬取数据.py):共729个武汉房源数据
19 | + 可视化(可视化.py):武汉各类型房源占比饼状图、武汉地区房价水平柱形图
20 | + 热力图(toTxt.py):往add.txt写入所有房源经纬度,自行写入到thermalMap.html要求位置,运行该html即可获得热力图
21 |
22 | ### 可视化结果
23 |
24 | 
25 |
26 | 
27 |
28 | 
29 |
30 | 
31 |
32 | # 一、前言
33 |
34 | ## 1.1项目背景
35 |
36 | 随着时代的发展,人们的生活水平越来越高,但与之对应房价也在逐渐上涨,为了追求高质量的生活,有的人选择了租房的形式来避开高额的房贷压力。面对网上形形色色的租房信息和无法得知其中是否有黑心中介,许多人都在为无法找到一个很好的房源而烦恼。
37 |
38 | 链家网站就提供了这样一个平台,它是集房源信息搜索、产品研发、大数据处理、服务标准建立为一体的国内领先且重度垂直的全产业链房产服务平台。链家网线上房源已覆盖[北京](https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC/128981?fromModule=lemma_inlink)、[上海](https://baike.baidu.com/item/%E4%B8%8A%E6%B5%B7/114606?fromModule=lemma_inlink)、[广州](https://baike.baidu.com/item/%E5%B9%BF%E5%B7%9E/72101?fromModule=lemma_inlink)、[深圳](https://baike.baidu.com/item/%E6%B7%B1%E5%9C%B3/140588?fromModule=lemma_inlink)、[天津](https://baike.baidu.com/item/%E5%A4%A9%E6%B4%A5/132308?fromModule=lemma_inlink)、[成都](https://baike.baidu.com/item/%E6%88%90%E9%83%BD/128473?fromModule=lemma_inlink)、[青岛](https://baike.baidu.com/item/%E9%9D%92%E5%B2%9B/60244?fromModule=lemma_inlink)、[重庆](https://baike.baidu.com/item/%E9%87%8D%E5%BA%86/23586?fromModule=lemma_inlink)、[大连](https://baike.baidu.com/item/%E5%A4%A7%E8%BF%9E/152852?fromModule=lemma_inlink)等42个城市,旨在通过不断提高服务效率、提升服务体验,为用户提供更安全、更便捷、更舒心的综合房产服务。
39 |
40 | 本项目利用爬虫技术架爬取链家网站的房源信息,解析并存储到MongoDB中,再对这些数据进行处理并可视化。
41 |
42 | ## 1.2项目分析
43 |
44 | 爬虫的本质为模拟浏览器打开网页,获取浏览器的数据(爬虫者想要的数据);浏览器打开网页的过程:当你在通过浏览器访问一个链接后,经过DNS服务器找到服务器IP,向服务器发送一个request;服务器经过解析后,给出一个response解析渲染后,显示网页内容;四步基础流程:1.请求目标链接;2.获取响应内容;3.解析内容;4.存储数据;下面分别进行简单描述:
45 |
46 | 1.请求目标链接
47 |
48 | 发起一个带有header、请求参数等信息的Request,等待服务器响应;
49 |
50 | 2.获取响应内容
51 |
52 | 服务器正常响应后,Response的内容即包含所有页面内容(可以是HTML、JSON字符串、二进制数据(图片、视频)等等)
53 |
54 | 3.解析内容
55 |
56 | 得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析;可能是Json字符串,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理……
57 |
58 | 4.存储数据
59 |
60 | 存储形式多样,可以存为文本,也可以存储到数据库,或者存为特定格式的文件;
61 |
62 | 通过上述可以基本了解爬虫的流程,本项目的实现步骤大致如下:
63 |
64 | 1. 对爬取的网页标签进行分析
65 | 2. 使用python进行网页爬取
66 | 3. 将爬取的数据存储进MongoDB
67 | 4. 对爬取的数据进行聚合管道处理并可视化
68 | 5. 利用百度地图api生成武汉房源的热力图
69 |
70 | 本项目将使用到Python,pymongodb等编程技术,利用requests爬虫,re正则,proxy_pool(代理ip池)和fake useragent(虚假请求头)防反爬对网页进行爬取,再通过聚合管道方法和百度地图api对数据进行处理并可视化。
71 |
72 | # 二、开发环境和工具
73 |
74 | ## 2.1开发环境
75 |
76 | PC、MongoDB、Python3、redis
77 |
78 | ## 2.2开发工具
79 |
80 | Pycharm、MongoDB Compass
81 |
82 | ## 2.3环境和工具简介
83 |
84 | **Redis**:Redis(Remote Directory Server,远程字典服务器),是一个用C语言编写的、开源的、基于内存运行并支持持久化的(redis中的数据大部分时间都是存储在内存中的,访问效率高,适合存储简单、少量、经常访问的数据)、高性能的NoSQL数据库,也是当前热门的NoSQL数据库之一。Redis又被当成“缓存数据库”,但会定期持久化。本项目在ip代理池中使用到redis存储数据。
85 |
86 | **MongoDB Compass**:在使用MongoDB过程中,如果单单依靠命令行操作MongoDB数据库,效率不高而且查看不方便。因此MongoDB官网提供的一个可视化管理工具,叫MongoDB Compass,它集创建数据库、管理集合和文档、运行临时查询、评估和优化查询、性能图表、构建地理查询等功能为一体,很方便。
87 |
88 | # 三、设计原理与思想
89 |
90 | ## 3.1requests模块简介
91 |
92 | requests 库是用Python语言编写,用于访问网络资源的第三方库,它基于urllib,虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。requests库可以帮助实现自动爬取HTML网页页面以及模拟人类访问服务器自动提交网络请求。
93 |
94 | Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
95 |
96 | Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6—3.5,而且能在PyPy下完美运行。
97 |
98 | ## 3.2proxy_pool(代理ip池)简介
99 |
100 | 做爬虫的时候,经常会遇到对于一个网页,使用同一个IP多次会被禁掉IP的问题,我们可以自己手动更换代理IP再继续这个问题但多少会有点麻烦,对于一个懒人来说,手动更换IP太麻烦,而且也不符合程序员懒惰的美德,于是便有了下面的故事。
101 |
102 | proxy_pool 是一个开源的代理池,聚合了各大免费的 ip 代理池。当自己的爬虫因为爬的太快了 ip 被封了的时候,代理池就可以派上用场啦
103 |
104 | 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。
105 |
106 | ## 3.3fake-useragent库(虚假请求头)模块简介
107 |
108 | User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
109 |
110 | 在爬虫中进行request请求,很多时候,都需要添加请求头,不然服务器会认为是非法的请求,从而拒绝你的访问。在添加请求头中最常用的就是添加user-agent来讲本次请求伪装成浏览器。
111 |
112 | 而fake-useragent库中就多种浏览器的请求头,当我们需要爬虫的时候,仅仅只需要调用一下这个库就可以使用了。
113 |
114 | 本次项目所使用的请求头库如图所示:
115 |
116 | ## 3.4mongodb模块简介
117 |
118 | MongoDB是一个文档数据库(以 JSON 为数据模型),由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD 文档。
119 |
120 | MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,数据格式是BSON,一种类似JSON的二进制形式的存储格式,简称Binary JSON ,和JSON一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。原则上 Oracle 和MySQL 能做的事情,MongoDB 都能做(包括 ACID 事务)。
121 |
122 | 主要特点:
123 |
124 | 1.MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
125 |
126 | 2.你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
127 |
128 | 3.你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
129 |
130 | 4.如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
131 |
132 | 5.Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
133 |
134 | 6.MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
135 |
136 | 7.Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
137 |
138 | 8.Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
139 |
140 | 9.Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
141 |
142 | 10.GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
143 |
144 | 11.MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
145 |
146 | 12.MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C\#等多种语言。
147 |
148 | # 四、开发流程
149 |
150 | ## 4.1数据分析
151 |
152 | ### 4.1.1整体网页分析
153 |
154 | 该网站显示有729个房源
155 |
156 | 实则在第47页已查询不到新房
157 |
158 | 故在爬取过程中,只爬取47页
159 |
160 | ### 4.1.2分析所爬取网页标签格式
161 |
162 | 本次爬取网站为武汉的链家网站,我们可以利用浏览器的开发者工具来帮助我们快速找到要爬取的信息所在标签,只需按f12,点击箭头所指的按钮,选择想要获取的信息,浏览器就能快速找到信息所在标签
163 |
164 | 
165 |
166 | 我们需要的数据有地区名,房子平米数,房源价格等信息,通过网页检查可以看到相关的网页标签,从检查中,我们可以知道,所有的房源数据都在一个ul标签里面,属性是“class=resblock-list-wrapper”,那么接着往下可以找到想要获取的楼盘区域,需要获取ul下li里面的a标签内容,如下:
167 |
168 | 
169 |
170 | 同理,我们可以找到其他所需要的房源信息所在的标签,这样就可以通过相关代码爬取所需要的信息了。
171 |
172 | ### 4.1.3使用python的requests爬虫库从网站上获取数据
173 |
174 | 1. 导库
175 |
176 | 
177 |
178 | 1. 设置随机请求头和ip遍历网页数据,利用xpath技术和正则表达爬取所需要的数据
179 | 2. 其中利用到一点防反爬,每个分页睡眠30-35秒,每次页内遍历一次睡眠0-5秒
180 | 3. 将爬取的数据存储在mongodb中
181 |
182 | ## 4.2数据处理
183 |
184 | ### 4.2.1利用mongodb可视化工具查看房源数据
185 |
186 | 
187 |
188 | ### 4.2.2对房源数据进行聚合管道处理
189 |
190 | 
191 |
192 | ### 4.2.3将处理完的数据通过饼状图和柱状图进行可视化
193 |
194 | 代码如下
195 |
196 | 
197 |
198 | 武汉各类型房源占比饼状图:
199 |
200 | 武汉地区房价水平柱形图:
201 |
202 | ## 4.3百度热力图
203 |
204 | ### 4.3.1导库并连接数据库
205 |
206 | 
207 |
208 | **4.3.2对数据进行聚合处理并将经纬度存储在txt文档中**
209 |
210 | 
211 |
212 | ### 4.3.3将经纬度写入thermalMap.html要求位置,运行热力图
213 |
214 | 
215 |
216 | 源码如图所示
217 |
--------------------------------------------------------------------------------
/add.txt:
--------------------------------------------------------------------------------
1 | {"lng":116.84354869905602,"lat":40.38419727507226,"count":50},
2 | {"lng":114.57918083288278,"lat":30.664672939449183,"count":50},
3 | {"lng":114.17834991200324,"lat":30.495862466424448,"count":50},
4 | {"lng":114.39469727204303,"lat":30.632438512318092,"count":50},
5 | {"lng":116.28479476676124,"lat":39.934451271209454,"count":50},
6 | {"lng":121.06518249732629,"lat":27.99513524018855,"count":50},
7 | {"lng":110.21801051871019,"lat":20.281451062173687,"count":50},
8 | {"lng":114.06694987791371,"lat":30.57007515010958,"count":50},
9 | {"lng":114.25725518155814,"lat":30.69276894909816,"count":50},
10 | {"lng":120.29989323349596,"lat":30.37354791568656,"count":50},
11 | {"lng":115.05712024154737,"lat":38.182105881574884,"count":50},
12 | {"lng":114.29001045469066,"lat":30.447912997176925,"count":50},
13 | {"lng":104.279811095809,"lat":30.56546158998754,"count":50},
14 | {"lng":108.94385696126233,"lat":34.19130402629117,"count":50},
15 | {"lng":116.2525040817484,"lat":25.107972945560043,"count":50},
16 | {"lng":118.80736446765341,"lat":39.34594253205643,"count":50},
17 | {"lng":115.22812139378343,"lat":29.8025112157251,"count":50},
18 | {"lng":112.8983059577866,"lat":28.195779013430656,"count":50},
19 | {"lng":114.2572900151509,"lat":30.472165086075076,"count":50},
20 | {"lng":115.9742308790712,"lat":40.46398568975255,"count":50},
21 | {"lng":116.51402032442262,"lat":39.912112014209534,"count":50},
22 | {"lng":114.25298661343582,"lat":30.739323938785283,"count":50},
23 | {"lng":116.42299799150473,"lat":40.05880917477214,"count":50},
24 | {"lng":114.57511663371959,"lat":30.655677341784138,"count":50},
25 | {"lng":112.16743444425771,"lat":27.44156733215448,"count":50},
26 | {"lng":113.77926753834328,"lat":30.29739451253328,"count":50},
27 | {"lng":114.27731263681548,"lat":30.728715130703154,"count":50},
28 | {"lng":114.23773329604585,"lat":30.51454683479979,"count":50},
29 | {"lng":114.26150838865624,"lat":30.738311431989455,"count":50},
30 | {"lng":114.26348753535582,"lat":30.620781942686587,"count":50},
31 | {"lng":114.37468652867221,"lat":30.50103020872686,"count":50},
32 | {"lng":104.279811095809,"lat":30.56546158998754,"count":50},
33 | {"lng":114.18679596006915,"lat":30.534708917540843,"count":50},
34 | {"lng":123.55487576075247,"lat":41.77868333195459,"count":50},
35 | {"lng":121.94377118920607,"lat":29.208053559410747,"count":50},
36 | {"lng":113.89947643138142,"lat":22.50211477165372,"count":50},
37 | {"lng":114.09402649798787,"lat":22.547364746018776,"count":50},
38 | {"lng":118.79530570431801,"lat":32.043461667969964,"count":50},
39 | {"lng":121.3041036630978,"lat":31.138020513235634,"count":50},
40 | {"lng":104.0401900772945,"lat":30.69784815292824,"count":50},
41 | {"lng":114.4262137818773,"lat":30.65631008597533,"count":50},
42 | {"lng":114.60595177882455,"lat":30.693431803426154,"count":50},
43 | {"lng":114.31438058487086,"lat":30.409210017860314,"count":50},
44 | {"lng":114.28472689117262,"lat":30.47626789669126,"count":50},
45 | {"lng":117.23152199796574,"lat":31.811913947415835,"count":50},
46 | {"lng":114.2991552946128,"lat":30.43151924348279,"count":50},
47 | {"lng":121.22443914572588,"lat":31.38269667943434,"count":50},
48 | {"lng":103.97362590849679,"lat":30.623588614402212,"count":50},
49 | {"lng":116.36391706692734,"lat":40.00804629477044,"count":50},
50 | {"lng":114.03843550509379,"lat":30.321001678827862,"count":50},
51 | {"lng":114.21332498788148,"lat":30.579329898459587,"count":50},
52 | {"lng":118.79530570431801,"lat":32.043461667969964,"count":50},
53 | {"lng":114.30027539175319,"lat":30.72464394441699,"count":50},
54 | {"lng":114.4800286598941,"lat":30.463489643596816,"count":50},
55 | {"lng":114.62107807581542,"lat":30.494866366982638,"count":50},
56 | {"lng":114.32855126446022,"lat":30.38156421818202,"count":50},
57 | {"lng":116.29947110252215,"lat":39.82633569850291,"count":50},
58 | {"lng":114.27411457936941,"lat":30.59283046766351,"count":50},
59 | {"lng":121.72722900407123,"lat":31.241164706234475,"count":50},
60 | {"lng":117.7425274890137,"lat":39.048049327613185,"count":50},
61 | {"lng":114.14080361626381,"lat":30.476322753696767,"count":50},
62 | {"lng":114.06938742991504,"lat":30.626032702058712,"count":50},
63 | {"lng":114.2228199872914,"lat":30.64477386627271,"count":50},
64 | {"lng":116.31452822998875,"lat":39.872522524975224,"count":50},
65 | {"lng":104.279811095809,"lat":30.56546158998754,"count":50},
66 | {"lng":114.06863087701454,"lat":30.576501021920812,"count":50},
67 | {"lng":116.61766600568892,"lat":40.136283053166984,"count":50},
68 | {"lng":116.5699979471903,"lat":23.658193760423032,"count":50},
69 | {"lng":118.79530570431801,"lat":32.043461667969964,"count":50},
70 | {"lng":114.2861386681121,"lat":30.64970990863271,"count":50},
71 | {"lng":118.91329876186748,"lat":30.29704184169991,"count":50},
72 | {"lng":112.16743444425771,"lat":27.44156733215448,"count":50},
73 | {"lng":104.10703730215842,"lat":30.628613458569497,"count":50},
74 | {"lng":113.98683009930933,"lat":30.591537323750057,"count":50},
75 | {"lng":116.31857114376696,"lat":40.043278129278725,"count":50},
76 | {"lng":118.90292647729652,"lat":32.116389283712294,"count":50},
77 | {"lng":116.55352070413792,"lat":39.75582410726281,"count":50},
78 | {"lng":116.5699979471903,"lat":23.658193760423032,"count":50},
79 | {"lng":116.55394120094715,"lat":39.81994822541635,"count":50},
80 | {"lng":116.5699979471903,"lat":23.658193760423032,"count":50},
81 | {"lng":112.8983059577866,"lat":28.195779013430656,"count":50},
82 | {"lng":113.61563102422951,"lat":23.554433055017444,"count":50},
83 | {"lng":114.4800286598941,"lat":30.463489643596816,"count":50},
84 | {"lng":121.49461620582339,"lat":31.220179296620262,"count":50},
85 | {"lng":117.23152199796574,"lat":31.811913947415835,"count":50},
86 | {"lng":114.48727133789885,"lat":30.659130006733935,"count":50},
87 | {"lng":115.58883913053604,"lat":38.48923356647569,"count":50},
88 | {"lng":114.263523108254,"lat":30.46616480493062,"count":50},
89 | {"lng":114.42137541857001,"lat":30.615235795401748,"count":50},
90 | {"lng":114.14148965218176,"lat":30.64513994792398,"count":50},
91 | {"lng":114.1347584693344,"lat":30.671760731411307,"count":50},
92 | {"lng":114.23031122643076,"lat":30.514853444883837,"count":50},
93 | {"lng":114.12511785460133,"lat":30.623230452704753,"count":50},
94 | {"lng":120.0590829483168,"lat":30.382492946895745,"count":50},
95 | {"lng":114.51214595645345,"lat":30.564272871265036,"count":50},
96 | {"lng":116.50776479434279,"lat":40.17553813649639,"count":50},
97 | {"lng":114.333622978317,"lat":30.6403228215619,"count":50},
98 | {"lng":114.41829396117913,"lat":30.72110493369464,"count":50},
99 | {"lng":114.27701296209736,"lat":30.47781936526063,"count":50},
100 | {"lng":120.51909314578323,"lat":27.559962023463697,"count":50},
101 | {"lng":114.13580454610077,"lat":30.65668420070916,"count":50},
102 | {"lng":114.61715679260325,"lat":30.693773864894155,"count":50},
103 | {"lng":114.61189245282313,"lat":30.721442084079875,"count":50},
104 | {"lng":114.29261068981985,"lat":30.5154326723795,"count":50},
105 | {"lng":114.2715042832185,"lat":30.636979016508782,"count":50},
106 | {"lng":104.04872173387552,"lat":30.647512492825093,"count":50},
107 | {"lng":114.58353896652004,"lat":30.6810534164489,"count":50},
108 | {"lng":114.24555942347934,"lat":30.592179118249955,"count":50},
109 | {"lng":114.30524140786667,"lat":30.605497804502996,"count":50},
110 | {"lng":114.24917106078219,"lat":30.573809415497752,"count":50},
111 | {"lng":116.50776479434279,"lat":40.17553813649639,"count":50},
112 | {"lng":119.28223659120768,"lat":25.618733890009228,"count":50},
113 | {"lng":114.3800600125718,"lat":30.636048855640684,"count":50},
114 | {"lng":116.04763645280234,"lat":39.6989200069883,"count":50},
115 | {"lng":114.35045554601551,"lat":30.50633395680806,"count":50},
116 | {"lng":119.80934431484343,"lat":30.800504919623997,"count":50},
117 | {"lng":116.3038285130594,"lat":39.70771733449974,"count":50},
118 | {"lng":114.28411155189829,"lat":30.605619755084764,"count":50},
119 | {"lng":116.38512525154296,"lat":39.977744865776515,"count":50},
120 | {"lng":114.26295286391628,"lat":30.589919140091766,"count":50},
121 | {"lng":114.18829972349286,"lat":30.61715183280507,"count":50},
122 | {"lng":114.27686824507968,"lat":30.61993802161231,"count":50},
123 | {"lng":114.36928995832102,"lat":30.607058251856824,"count":50},
124 | {"lng":113.58326741231002,"lat":23.140123259717633,"count":50},
125 | {"lng":116.7235246469334,"lat":23.37777578062844,"count":50},
126 | {"lng":114.02908547743758,"lat":22.749869252348475,"count":50},
127 | {"lng":114.13277797517657,"lat":30.619028207011596,"count":50},
128 | {"lng":114.20887676045378,"lat":30.534348917637473,"count":50},
129 | {"lng":121.27115031360032,"lat":31.285946446000818,"count":50},
130 | {"lng":114.39625933549434,"lat":30.883256919758008,"count":50},
131 | {"lng":104.02064887821375,"lat":30.709380844068345,"count":50},
132 | {"lng":116.4670233157349,"lat":39.90266393531041,"count":50},
133 | {"lng":114.16750233398696,"lat":30.60027749959139,"count":50},
134 | {"lng":114.45173392277135,"lat":30.48271201954459,"count":50},
135 | {"lng":114.20560036897062,"lat":30.54515122192673,"count":50},
136 | {"lng":116.55394120094715,"lat":39.81994822541635,"count":50},
137 | {"lng":116.50776479434279,"lat":40.17553813649639,"count":50},
138 | {"lng":114.5188899850696,"lat":30.49145890394599,"count":50},
139 | {"lng":116.55394120094715,"lat":39.81994822541635,"count":50},
140 | {"lng":121.87970477624891,"lat":31.508929590723206,"count":50},
141 | {"lng":104.07242154848416,"lat":30.598302762766384,"count":50},
142 | {"lng":116.37483354161658,"lat":39.945938325966814,"count":50},
143 | {"lng":113.47016499948589,"lat":23.10573499607617,"count":50},
144 | {"lng":114.29867703675929,"lat":30.59711981291366,"count":50},
145 | {"lng":114.20729996299552,"lat":30.64455055034087,"count":50},
146 | {"lng":116.30812600661915,"lat":39.975860498739834,"count":50},
147 | {"lng":120.45900631559522,"lat":30.19935321149215,"count":50},
148 | {"lng":114.7151838423963,"lat":30.783071296928046,"count":50},
149 | {"lng":114.23475595226358,"lat":30.63862048681405,"count":50},
150 | {"lng":121.3624859754801,"lat":31.254007279028887,"count":50},
151 | {"lng":104.86674791446151,"lat":28.754189468280344,"count":50},
152 | {"lng":114.44155666032663,"lat":30.437176331737394,"count":50},
153 | {"lng":103.9419471646874,"lat":30.60680042434455,"count":50},
154 | {"lng":114.2103700119064,"lat":30.67665888681772,"count":50},
155 | {"lng":116.46570792697663,"lat":39.91589876396244,"count":50},
156 | {"lng":114.43985140697703,"lat":30.441860337707134,"count":50},
157 | {"lng":114.29042726844729,"lat":30.806793421392626,"count":50},
158 | {"lng":113.03425398650239,"lat":28.121196480466523,"count":50},
159 | {"lng":115.83544537269613,"lat":37.79494222462491,"count":50},
160 | {"lng":114.32338699591389,"lat":30.428081515570526,"count":50},
161 | {"lng":121.31233402801077,"lat":31.191363832356338,"count":50},
162 | {"lng":118.73516963008859,"lat":34.92873748451877,"count":50},
163 | {"lng":114.14884407939196,"lat":30.65013601085393,"count":50},
164 | {"lng":118.85373525122078,"lat":28.91217875838325,"count":50},
165 | {"lng":113.32187497171148,"lat":23.16532797096623,"count":50},
166 | {"lng":116.48073801544739,"lat":39.86376109083561,"count":50},
167 | {"lng":103.99585295122182,"lat":30.672257632402875,"count":50},
168 | {"lng":114.36778942879714,"lat":30.87672110500363,"count":50},
169 | {"lng":119.10161890016539,"lat":36.25967465065051,"count":50},
170 | {"lng":116.55221196284045,"lat":39.79496010946531,"count":50},
171 | {"lng":116.61766600568892,"lat":40.136283053166984,"count":50},
172 | {"lng":116.40186247980488,"lat":39.94250659090736,"count":50},
173 | {"lng":114.226708572183,"lat":30.575109483180377,"count":50},
174 | {"lng":114.02956985852417,"lat":30.585624187770275,"count":50},
175 | {"lng":114.82185142339816,"lat":30.85454350829465,"count":50},
176 | {"lng":114.27451306769363,"lat":30.46633468481911,"count":50},
177 | {"lng":114.57918083288278,"lat":30.664672939449183,"count":50},
178 | {"lng":114.51547705294556,"lat":30.56224359622929,"count":50},
179 | {"lng":106.53006189449778,"lat":29.3818349604092,"count":50},
180 | {"lng":121.38964049341901,"lat":31.115526025544256,"count":50},
181 | {"lng":113.24285687501065,"lat":23.197499059855183,"count":50},
182 | {"lng":114.27523000532115,"lat":30.545043452444233,"count":50},
183 | {"lng":121.49461620582339,"lat":31.220179296620262,"count":50},
184 | {"lng":116.55394120094715,"lat":39.81994822541635,"count":50},
185 | {"lng":114.42950598174082,"lat":30.500104953595624,"count":50},
186 | {"lng":114.28416940097652,"lat":30.58655183190579,"count":50},
187 | {"lng":114.25404373935996,"lat":30.61911219623623,"count":50},
188 | {"lng":119.30747367602721,"lat":26.10838221454552,"count":50},
189 | {"lng":116.5699979471903,"lat":23.658193760423032,"count":50},
190 | {"lng":114.45891515667923,"lat":30.4344436175082,"count":50},
191 | {"lng":114.20739132066588,"lat":30.53796741397203,"count":50},
192 | {"lng":114.3577817664327,"lat":30.72325331566374,"count":50},
193 | {"lng":114.08261560736332,"lat":30.325600910180384,"count":50},
194 | {"lng":116.49774913705929,"lat":39.99782116290235,"count":50},
195 | {"lng":114.49567148255319,"lat":30.56557882075384,"count":50},
196 |
--------------------------------------------------------------------------------
/可视化结果/thermalMap.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 武汉链家房源热力图
10 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/fake_useragent.json:
--------------------------------------------------------------------------------
1 | {
2 | "browsers": {
3 | "chrome": [
4 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
5 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36",
6 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
7 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
8 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
9 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
10 | "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36",
11 | "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
12 | "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
13 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36",
14 | "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36",
15 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
16 | "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
17 | "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
18 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
19 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
20 | "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
21 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36",
22 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36",
23 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36",
24 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36",
25 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36",
26 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36",
27 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F",
28 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
29 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36",
30 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36",
31 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
32 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
33 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36",
34 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36",
35 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36",
36 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36",
37 | "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36",
38 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36",
39 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36",
40 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36",
41 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36",
42 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36",
43 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
44 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
45 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
46 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
47 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
48 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
49 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36",
50 | "Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
51 | "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
52 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17",
53 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17"
54 | ],
55 | "internetexplorer": [
56 | "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko",
57 | "Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko",
58 | "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0",
59 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)",
60 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)",
61 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)",
62 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)",
63 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)",
64 | "Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)",
65 | "Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)",
66 | "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)",
67 | "Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)",
68 | "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))",
69 | "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
70 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)",
71 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)",
72 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7",
73 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)",
74 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)",
75 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
76 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
77 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)",
78 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0",
79 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)",
80 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; Tablet PC 2.0)",
81 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)",
82 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)",
83 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)",
84 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205",
85 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.1; SV1; .NET CLR 2.8.52393; WOW64; en-US)",
86 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)",
87 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)",
88 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)",
89 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
90 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)",
91 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; .NET CLR 2.7.58687; SLCC2; Media Center PC 5.0; Zune 3.4; Tablet PC 3.6; InfoPath.3)",
92 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)",
93 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)",
94 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)",
95 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
96 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4322)",
97 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)",
98 | "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; .NET CLR 2.0.34861; .NET CLR 3.0.3746.3218; .NET CLR 3.5.33652; msn OptimizedIE8;ENUS)",
99 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)",
100 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)",
101 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8",
102 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)",
103 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)",
104 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)",
105 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)"
106 | ],
107 | "firefox": [
108 | "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0",
109 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0",
110 | "Mozilla/5.0 (X11; Linux i586; rv:63.0) Gecko/20100101 Firefox/63.0",
111 | "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0",
112 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:62.0) Gecko/20100101 Firefox/62.0",
113 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:10.0) Gecko/20100101 Firefox/62.0",
114 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.13; ko; rv:1.9.1b2) Gecko/20081201 Firefox/60.0",
115 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/58.0.1",
116 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/58.0",
117 | "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.59.12) Gecko/20160044 Firefox/52.59.12",
118 | "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20060814 Firefox/51.0",
119 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20120121 Firefox/46.0",
120 | "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18",
121 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
122 | "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
123 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
124 | "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0",
125 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0",
126 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/31.0",
127 | "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
128 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0",
129 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0",
130 | "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0",
131 | "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0",
132 | "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3",
133 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0",
134 | "Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/26.0",
135 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0",
136 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0",
137 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",
138 | "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",
139 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0",
140 | "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0",
141 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0",
142 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0",
143 | "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0",
144 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0",
145 | "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0",
146 | "Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0",
147 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
148 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
149 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0",
150 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0",
151 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0",
152 | "Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0",
153 | "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0",
154 | "Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0",
155 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0",
156 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0",
157 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0"
158 | ],
159 | "safari": [
160 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A",
161 | "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25",
162 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
163 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10",
164 | "Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3",
165 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1",
166 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1",
167 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
168 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
169 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
170 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
171 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
172 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
173 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
174 | "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
175 | "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
176 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
177 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
178 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; sv-se) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
179 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
180 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
181 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
182 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-fr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
183 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
184 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
185 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-gb) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
186 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
187 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
188 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
189 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
190 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
191 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
192 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
193 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
194 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
195 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; it-IT) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
196 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
197 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/534.16+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
198 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-ch) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
199 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
200 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
201 | "Mozilla/5.0 (Android 2.2; Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
202 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-HK) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
203 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
204 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; tr-TR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
205 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; nb-NO) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
206 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
207 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
208 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
209 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5"
210 | ],
211 | "opera": [
212 | "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
213 | "Opera/9.80 (Macintosh; Intel Mac OS X 10.14.1) Presto/2.12.388 Version/12.16",
214 | "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
215 | "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",
216 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",
217 | "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
218 | "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00",
219 | "Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00",
220 | "Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00",
221 | "Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00",
222 | "Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0",
223 | "Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62",
224 | "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62",
225 | "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
226 | "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52",
227 | "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51",
228 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51",
229 | "Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50",
230 | "Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50",
231 | "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11",
232 | "Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11",
233 | "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11",
234 | "Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10",
235 | "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10",
236 | "Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10",
237 | "Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1",
238 | "Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01",
239 | "Opera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01",
240 | "Opera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01",
241 | "Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01",
242 | "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.7.62 Version/11.01",
243 | "Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01",
244 | "Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01",
245 | "Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01",
246 | "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01",
247 | "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01",
248 | "Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01",
249 | "Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01",
250 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101213 Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01",
251 | "Mozilla/5.0 (Windows NT 6.1; U; nl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01",
252 | "Mozilla/5.0 (Windows NT 6.1; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01",
253 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01",
254 | "Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00",
255 | "Opera/9.80 (X11; Linux i686; U; it) Presto/2.7.62 Version/11.00",
256 | "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00",
257 | "Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.00",
258 | "Opera/9.80 (Windows NT 6.1; U; ko) Presto/2.7.62 Version/11.00",
259 | "Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.7.62 Version/11.00",
260 | "Opera/9.80 (Windows NT 6.1; U; en-GB) Presto/2.7.62 Version/11.00",
261 | "Opera/9.80 (Windows NT 6.1 x64; U; en) Presto/2.7.62 Version/11.00"
262 | ]
263 | },
264 | "randomize": {
265 | "0": "chrome",
266 | "1": "chrome",
267 | "2": "chrome",
268 | "3": "chrome",
269 | "4": "chrome",
270 | "5": "chrome",
271 | "6": "chrome",
272 | "7": "chrome",
273 | "8": "chrome",
274 | "9": "chrome",
275 | "10": "chrome",
276 | "11": "chrome",
277 | "12": "chrome",
278 | "13": "chrome",
279 | "14": "chrome",
280 | "15": "chrome",
281 | "16": "chrome",
282 | "17": "chrome",
283 | "18": "chrome",
284 | "19": "chrome",
285 | "20": "chrome",
286 | "21": "chrome",
287 | "22": "chrome",
288 | "23": "chrome",
289 | "24": "chrome",
290 | "25": "chrome",
291 | "26": "chrome",
292 | "27": "chrome",
293 | "28": "chrome",
294 | "29": "chrome",
295 | "30": "chrome",
296 | "31": "chrome",
297 | "32": "chrome",
298 | "33": "chrome",
299 | "34": "chrome",
300 | "35": "chrome",
301 | "36": "chrome",
302 | "37": "chrome",
303 | "38": "chrome",
304 | "39": "chrome",
305 | "40": "chrome",
306 | "41": "chrome",
307 | "42": "chrome",
308 | "43": "chrome",
309 | "44": "chrome",
310 | "45": "chrome",
311 | "46": "chrome",
312 | "47": "chrome",
313 | "48": "chrome",
314 | "49": "chrome",
315 | "50": "chrome",
316 | "51": "chrome",
317 | "52": "chrome",
318 | "53": "chrome",
319 | "54": "chrome",
320 | "55": "chrome",
321 | "56": "chrome",
322 | "57": "chrome",
323 | "58": "chrome",
324 | "59": "chrome",
325 | "60": "chrome",
326 | "61": "chrome",
327 | "62": "chrome",
328 | "63": "chrome",
329 | "64": "chrome",
330 | "65": "chrome",
331 | "66": "chrome",
332 | "67": "chrome",
333 | "68": "chrome",
334 | "69": "chrome",
335 | "70": "chrome",
336 | "71": "chrome",
337 | "72": "chrome",
338 | "73": "chrome",
339 | "74": "chrome",
340 | "75": "chrome",
341 | "76": "chrome",
342 | "77": "chrome",
343 | "78": "chrome",
344 | "79": "chrome",
345 | "80": "chrome",
346 | "81": "chrome",
347 | "82": "chrome",
348 | "83": "chrome",
349 | "84": "chrome",
350 | "85": "chrome",
351 | "86": "chrome",
352 | "87": "chrome",
353 | "88": "chrome",
354 | "89": "chrome",
355 | "90": "chrome",
356 | "91": "chrome",
357 | "92": "chrome",
358 | "93": "chrome",
359 | "94": "chrome",
360 | "95": "chrome",
361 | "96": "chrome",
362 | "97": "chrome",
363 | "98": "chrome",
364 | "99": "chrome",
365 | "100": "chrome",
366 | "101": "chrome",
367 | "102": "chrome",
368 | "103": "chrome",
369 | "104": "chrome",
370 | "105": "chrome",
371 | "106": "chrome",
372 | "107": "chrome",
373 | "108": "chrome",
374 | "109": "chrome",
375 | "110": "chrome",
376 | "111": "chrome",
377 | "112": "chrome",
378 | "113": "chrome",
379 | "114": "chrome",
380 | "115": "chrome",
381 | "116": "chrome",
382 | "117": "chrome",
383 | "118": "chrome",
384 | "119": "chrome",
385 | "120": "chrome",
386 | "121": "chrome",
387 | "122": "chrome",
388 | "123": "chrome",
389 | "124": "chrome",
390 | "125": "chrome",
391 | "126": "chrome",
392 | "127": "chrome",
393 | "128": "chrome",
394 | "129": "chrome",
395 | "130": "chrome",
396 | "131": "chrome",
397 | "132": "chrome",
398 | "133": "chrome",
399 | "134": "chrome",
400 | "135": "chrome",
401 | "136": "chrome",
402 | "137": "chrome",
403 | "138": "chrome",
404 | "139": "chrome",
405 | "140": "chrome",
406 | "141": "chrome",
407 | "142": "chrome",
408 | "143": "chrome",
409 | "144": "chrome",
410 | "145": "chrome",
411 | "146": "chrome",
412 | "147": "chrome",
413 | "148": "chrome",
414 | "149": "chrome",
415 | "150": "chrome",
416 | "151": "chrome",
417 | "152": "chrome",
418 | "153": "chrome",
419 | "154": "chrome",
420 | "155": "chrome",
421 | "156": "chrome",
422 | "157": "chrome",
423 | "158": "chrome",
424 | "159": "chrome",
425 | "160": "chrome",
426 | "161": "chrome",
427 | "162": "chrome",
428 | "163": "chrome",
429 | "164": "chrome",
430 | "165": "chrome",
431 | "166": "chrome",
432 | "167": "chrome",
433 | "168": "chrome",
434 | "169": "chrome",
435 | "170": "chrome",
436 | "171": "chrome",
437 | "172": "chrome",
438 | "173": "chrome",
439 | "174": "chrome",
440 | "175": "chrome",
441 | "176": "chrome",
442 | "177": "chrome",
443 | "178": "chrome",
444 | "179": "chrome",
445 | "180": "chrome",
446 | "181": "chrome",
447 | "182": "chrome",
448 | "183": "chrome",
449 | "184": "chrome",
450 | "185": "chrome",
451 | "186": "chrome",
452 | "187": "chrome",
453 | "188": "chrome",
454 | "189": "chrome",
455 | "190": "chrome",
456 | "191": "chrome",
457 | "192": "chrome",
458 | "193": "chrome",
459 | "194": "chrome",
460 | "195": "chrome",
461 | "196": "chrome",
462 | "197": "chrome",
463 | "198": "chrome",
464 | "199": "chrome",
465 | "200": "chrome",
466 | "201": "chrome",
467 | "202": "chrome",
468 | "203": "chrome",
469 | "204": "chrome",
470 | "205": "chrome",
471 | "206": "chrome",
472 | "207": "chrome",
473 | "208": "chrome",
474 | "209": "chrome",
475 | "210": "chrome",
476 | "211": "chrome",
477 | "212": "chrome",
478 | "213": "chrome",
479 | "214": "chrome",
480 | "215": "chrome",
481 | "216": "chrome",
482 | "217": "chrome",
483 | "218": "chrome",
484 | "219": "chrome",
485 | "220": "chrome",
486 | "221": "chrome",
487 | "222": "chrome",
488 | "223": "chrome",
489 | "224": "chrome",
490 | "225": "chrome",
491 | "226": "chrome",
492 | "227": "chrome",
493 | "228": "chrome",
494 | "229": "chrome",
495 | "230": "chrome",
496 | "231": "chrome",
497 | "232": "chrome",
498 | "233": "chrome",
499 | "234": "chrome",
500 | "235": "chrome",
501 | "236": "chrome",
502 | "237": "chrome",
503 | "238": "chrome",
504 | "239": "chrome",
505 | "240": "chrome",
506 | "241": "chrome",
507 | "242": "chrome",
508 | "243": "chrome",
509 | "244": "chrome",
510 | "245": "chrome",
511 | "246": "chrome",
512 | "247": "chrome",
513 | "248": "chrome",
514 | "249": "chrome",
515 | "250": "chrome",
516 | "251": "chrome",
517 | "252": "chrome",
518 | "253": "chrome",
519 | "254": "chrome",
520 | "255": "chrome",
521 | "256": "chrome",
522 | "257": "chrome",
523 | "258": "chrome",
524 | "259": "chrome",
525 | "260": "chrome",
526 | "261": "chrome",
527 | "262": "chrome",
528 | "263": "chrome",
529 | "264": "chrome",
530 | "265": "chrome",
531 | "266": "chrome",
532 | "267": "chrome",
533 | "268": "chrome",
534 | "269": "chrome",
535 | "270": "chrome",
536 | "271": "chrome",
537 | "272": "chrome",
538 | "273": "chrome",
539 | "274": "chrome",
540 | "275": "chrome",
541 | "276": "chrome",
542 | "277": "chrome",
543 | "278": "chrome",
544 | "279": "chrome",
545 | "280": "chrome",
546 | "281": "chrome",
547 | "282": "chrome",
548 | "283": "chrome",
549 | "284": "chrome",
550 | "285": "chrome",
551 | "286": "chrome",
552 | "287": "chrome",
553 | "288": "chrome",
554 | "289": "chrome",
555 | "290": "chrome",
556 | "291": "chrome",
557 | "292": "chrome",
558 | "293": "chrome",
559 | "294": "chrome",
560 | "295": "chrome",
561 | "296": "chrome",
562 | "297": "chrome",
563 | "298": "chrome",
564 | "299": "chrome",
565 | "300": "chrome",
566 | "301": "chrome",
567 | "302": "chrome",
568 | "303": "chrome",
569 | "304": "chrome",
570 | "305": "chrome",
571 | "306": "chrome",
572 | "307": "chrome",
573 | "308": "chrome",
574 | "309": "chrome",
575 | "310": "chrome",
576 | "311": "chrome",
577 | "312": "chrome",
578 | "313": "chrome",
579 | "314": "chrome",
580 | "315": "chrome",
581 | "316": "chrome",
582 | "317": "chrome",
583 | "318": "chrome",
584 | "319": "chrome",
585 | "320": "chrome",
586 | "321": "chrome",
587 | "322": "chrome",
588 | "323": "chrome",
589 | "324": "chrome",
590 | "325": "chrome",
591 | "326": "chrome",
592 | "327": "chrome",
593 | "328": "chrome",
594 | "329": "chrome",
595 | "330": "chrome",
596 | "331": "chrome",
597 | "332": "chrome",
598 | "333": "chrome",
599 | "334": "chrome",
600 | "335": "chrome",
601 | "336": "chrome",
602 | "337": "chrome",
603 | "338": "chrome",
604 | "339": "chrome",
605 | "340": "chrome",
606 | "341": "chrome",
607 | "342": "chrome",
608 | "343": "chrome",
609 | "344": "chrome",
610 | "345": "chrome",
611 | "346": "chrome",
612 | "347": "chrome",
613 | "348": "chrome",
614 | "349": "chrome",
615 | "350": "chrome",
616 | "351": "chrome",
617 | "352": "chrome",
618 | "353": "chrome",
619 | "354": "chrome",
620 | "355": "chrome",
621 | "356": "chrome",
622 | "357": "chrome",
623 | "358": "chrome",
624 | "359": "chrome",
625 | "360": "chrome",
626 | "361": "chrome",
627 | "362": "chrome",
628 | "363": "chrome",
629 | "364": "chrome",
630 | "365": "chrome",
631 | "366": "chrome",
632 | "367": "chrome",
633 | "368": "chrome",
634 | "369": "chrome",
635 | "370": "chrome",
636 | "371": "chrome",
637 | "372": "chrome",
638 | "373": "chrome",
639 | "374": "chrome",
640 | "375": "chrome",
641 | "376": "chrome",
642 | "377": "chrome",
643 | "378": "chrome",
644 | "379": "chrome",
645 | "380": "chrome",
646 | "381": "chrome",
647 | "382": "chrome",
648 | "383": "chrome",
649 | "384": "chrome",
650 | "385": "chrome",
651 | "386": "chrome",
652 | "387": "chrome",
653 | "388": "chrome",
654 | "389": "chrome",
655 | "390": "chrome",
656 | "391": "chrome",
657 | "392": "chrome",
658 | "393": "chrome",
659 | "394": "chrome",
660 | "395": "chrome",
661 | "396": "chrome",
662 | "397": "chrome",
663 | "398": "chrome",
664 | "399": "chrome",
665 | "400": "chrome",
666 | "401": "chrome",
667 | "402": "chrome",
668 | "403": "chrome",
669 | "404": "chrome",
670 | "405": "chrome",
671 | "406": "chrome",
672 | "407": "chrome",
673 | "408": "chrome",
674 | "409": "chrome",
675 | "410": "chrome",
676 | "411": "chrome",
677 | "412": "chrome",
678 | "413": "chrome",
679 | "414": "chrome",
680 | "415": "chrome",
681 | "416": "chrome",
682 | "417": "chrome",
683 | "418": "chrome",
684 | "419": "chrome",
685 | "420": "chrome",
686 | "421": "chrome",
687 | "422": "chrome",
688 | "423": "chrome",
689 | "424": "chrome",
690 | "425": "chrome",
691 | "426": "chrome",
692 | "427": "chrome",
693 | "428": "chrome",
694 | "429": "chrome",
695 | "430": "chrome",
696 | "431": "chrome",
697 | "432": "chrome",
698 | "433": "chrome",
699 | "434": "chrome",
700 | "435": "chrome",
701 | "436": "chrome",
702 | "437": "chrome",
703 | "438": "chrome",
704 | "439": "chrome",
705 | "440": "chrome",
706 | "441": "chrome",
707 | "442": "chrome",
708 | "443": "chrome",
709 | "444": "chrome",
710 | "445": "chrome",
711 | "446": "chrome",
712 | "447": "chrome",
713 | "448": "chrome",
714 | "449": "chrome",
715 | "450": "chrome",
716 | "451": "chrome",
717 | "452": "chrome",
718 | "453": "chrome",
719 | "454": "chrome",
720 | "455": "chrome",
721 | "456": "chrome",
722 | "457": "chrome",
723 | "458": "chrome",
724 | "459": "chrome",
725 | "460": "chrome",
726 | "461": "chrome",
727 | "462": "chrome",
728 | "463": "chrome",
729 | "464": "chrome",
730 | "465": "chrome",
731 | "466": "chrome",
732 | "467": "chrome",
733 | "468": "chrome",
734 | "469": "chrome",
735 | "470": "chrome",
736 | "471": "chrome",
737 | "472": "chrome",
738 | "473": "chrome",
739 | "474": "chrome",
740 | "475": "chrome",
741 | "476": "chrome",
742 | "477": "chrome",
743 | "478": "chrome",
744 | "479": "chrome",
745 | "480": "chrome",
746 | "481": "chrome",
747 | "482": "chrome",
748 | "483": "chrome",
749 | "484": "chrome",
750 | "485": "chrome",
751 | "486": "chrome",
752 | "487": "chrome",
753 | "488": "chrome",
754 | "489": "chrome",
755 | "490": "chrome",
756 | "491": "chrome",
757 | "492": "chrome",
758 | "493": "chrome",
759 | "494": "chrome",
760 | "495": "chrome",
761 | "496": "chrome",
762 | "497": "chrome",
763 | "498": "chrome",
764 | "499": "chrome",
765 | "500": "chrome",
766 | "501": "chrome",
767 | "502": "chrome",
768 | "503": "chrome",
769 | "504": "chrome",
770 | "505": "chrome",
771 | "506": "chrome",
772 | "507": "chrome",
773 | "508": "chrome",
774 | "509": "chrome",
775 | "510": "chrome",
776 | "511": "chrome",
777 | "512": "chrome",
778 | "513": "chrome",
779 | "514": "chrome",
780 | "515": "chrome",
781 | "516": "chrome",
782 | "517": "chrome",
783 | "518": "chrome",
784 | "519": "chrome",
785 | "520": "chrome",
786 | "521": "chrome",
787 | "522": "chrome",
788 | "523": "chrome",
789 | "524": "chrome",
790 | "525": "chrome",
791 | "526": "chrome",
792 | "527": "chrome",
793 | "528": "chrome",
794 | "529": "chrome",
795 | "530": "chrome",
796 | "531": "chrome",
797 | "532": "chrome",
798 | "533": "chrome",
799 | "534": "chrome",
800 | "535": "chrome",
801 | "536": "chrome",
802 | "537": "chrome",
803 | "538": "chrome",
804 | "539": "chrome",
805 | "540": "chrome",
806 | "541": "chrome",
807 | "542": "chrome",
808 | "543": "chrome",
809 | "544": "chrome",
810 | "545": "chrome",
811 | "546": "chrome",
812 | "547": "chrome",
813 | "548": "chrome",
814 | "549": "chrome",
815 | "550": "chrome",
816 | "551": "chrome",
817 | "552": "chrome",
818 | "553": "chrome",
819 | "554": "chrome",
820 | "555": "chrome",
821 | "556": "chrome",
822 | "557": "chrome",
823 | "558": "chrome",
824 | "559": "chrome",
825 | "560": "chrome",
826 | "561": "chrome",
827 | "562": "chrome",
828 | "563": "chrome",
829 | "564": "chrome",
830 | "565": "chrome",
831 | "566": "chrome",
832 | "567": "chrome",
833 | "568": "chrome",
834 | "569": "chrome",
835 | "570": "chrome",
836 | "571": "chrome",
837 | "572": "chrome",
838 | "573": "chrome",
839 | "574": "chrome",
840 | "575": "chrome",
841 | "576": "chrome",
842 | "577": "chrome",
843 | "578": "chrome",
844 | "579": "chrome",
845 | "580": "chrome",
846 | "581": "chrome",
847 | "582": "chrome",
848 | "583": "chrome",
849 | "584": "chrome",
850 | "585": "chrome",
851 | "586": "chrome",
852 | "587": "chrome",
853 | "588": "chrome",
854 | "589": "chrome",
855 | "590": "chrome",
856 | "591": "chrome",
857 | "592": "chrome",
858 | "593": "chrome",
859 | "594": "chrome",
860 | "595": "chrome",
861 | "596": "chrome",
862 | "597": "chrome",
863 | "598": "chrome",
864 | "599": "chrome",
865 | "600": "chrome",
866 | "601": "chrome",
867 | "602": "chrome",
868 | "603": "chrome",
869 | "604": "chrome",
870 | "605": "chrome",
871 | "606": "chrome",
872 | "607": "chrome",
873 | "608": "chrome",
874 | "609": "chrome",
875 | "610": "chrome",
876 | "611": "chrome",
877 | "612": "chrome",
878 | "613": "chrome",
879 | "614": "chrome",
880 | "615": "chrome",
881 | "616": "chrome",
882 | "617": "chrome",
883 | "618": "chrome",
884 | "619": "chrome",
885 | "620": "chrome",
886 | "621": "chrome",
887 | "622": "chrome",
888 | "623": "chrome",
889 | "624": "chrome",
890 | "625": "chrome",
891 | "626": "chrome",
892 | "627": "chrome",
893 | "628": "chrome",
894 | "629": "chrome",
895 | "630": "chrome",
896 | "631": "chrome",
897 | "632": "chrome",
898 | "633": "chrome",
899 | "634": "chrome",
900 | "635": "chrome",
901 | "636": "chrome",
902 | "637": "chrome",
903 | "638": "chrome",
904 | "639": "chrome",
905 | "640": "chrome",
906 | "641": "chrome",
907 | "642": "chrome",
908 | "643": "chrome",
909 | "644": "chrome",
910 | "645": "chrome",
911 | "646": "chrome",
912 | "647": "chrome",
913 | "648": "chrome",
914 | "649": "chrome",
915 | "650": "chrome",
916 | "651": "chrome",
917 | "652": "chrome",
918 | "653": "chrome",
919 | "654": "chrome",
920 | "655": "chrome",
921 | "656": "chrome",
922 | "657": "chrome",
923 | "658": "chrome",
924 | "659": "chrome",
925 | "660": "chrome",
926 | "661": "chrome",
927 | "662": "chrome",
928 | "663": "chrome",
929 | "664": "chrome",
930 | "665": "chrome",
931 | "666": "chrome",
932 | "667": "chrome",
933 | "668": "chrome",
934 | "669": "chrome",
935 | "670": "chrome",
936 | "671": "chrome",
937 | "672": "chrome",
938 | "673": "chrome",
939 | "674": "chrome",
940 | "675": "chrome",
941 | "676": "chrome",
942 | "677": "chrome",
943 | "678": "chrome",
944 | "679": "chrome",
945 | "680": "chrome",
946 | "681": "chrome",
947 | "682": "chrome",
948 | "683": "chrome",
949 | "684": "chrome",
950 | "685": "chrome",
951 | "686": "chrome",
952 | "687": "chrome",
953 | "688": "chrome",
954 | "689": "chrome",
955 | "690": "chrome",
956 | "691": "chrome",
957 | "692": "chrome",
958 | "693": "chrome",
959 | "694": "chrome",
960 | "695": "chrome",
961 | "696": "chrome",
962 | "697": "chrome",
963 | "698": "chrome",
964 | "699": "chrome",
965 | "700": "chrome",
966 | "701": "chrome",
967 | "702": "chrome",
968 | "703": "chrome",
969 | "704": "chrome",
970 | "705": "chrome",
971 | "706": "chrome",
972 | "707": "chrome",
973 | "708": "chrome",
974 | "709": "chrome",
975 | "710": "chrome",
976 | "711": "chrome",
977 | "712": "chrome",
978 | "713": "chrome",
979 | "714": "chrome",
980 | "715": "chrome",
981 | "716": "chrome",
982 | "717": "chrome",
983 | "718": "chrome",
984 | "719": "chrome",
985 | "720": "chrome",
986 | "721": "chrome",
987 | "722": "chrome",
988 | "723": "chrome",
989 | "724": "chrome",
990 | "725": "chrome",
991 | "726": "chrome",
992 | "727": "chrome",
993 | "728": "chrome",
994 | "729": "chrome",
995 | "730": "chrome",
996 | "731": "chrome",
997 | "732": "chrome",
998 | "733": "chrome",
999 | "734": "chrome",
1000 | "735": "chrome",
1001 | "736": "chrome",
1002 | "737": "chrome",
1003 | "738": "chrome",
1004 | "739": "chrome",
1005 | "740": "chrome",
1006 | "741": "chrome",
1007 | "742": "chrome",
1008 | "743": "chrome",
1009 | "744": "chrome",
1010 | "745": "chrome",
1011 | "746": "chrome",
1012 | "747": "chrome",
1013 | "748": "chrome",
1014 | "749": "chrome",
1015 | "750": "chrome",
1016 | "751": "chrome",
1017 | "752": "chrome",
1018 | "753": "chrome",
1019 | "754": "chrome",
1020 | "755": "chrome",
1021 | "756": "chrome",
1022 | "757": "chrome",
1023 | "758": "chrome",
1024 | "759": "chrome",
1025 | "760": "chrome",
1026 | "761": "chrome",
1027 | "762": "chrome",
1028 | "763": "chrome",
1029 | "764": "chrome",
1030 | "765": "chrome",
1031 | "766": "chrome",
1032 | "767": "chrome",
1033 | "768": "chrome",
1034 | "769": "chrome",
1035 | "770": "chrome",
1036 | "771": "chrome",
1037 | "772": "chrome",
1038 | "773": "chrome",
1039 | "774": "chrome",
1040 | "775": "chrome",
1041 | "776": "chrome",
1042 | "777": "chrome",
1043 | "778": "chrome",
1044 | "779": "chrome",
1045 | "780": "chrome",
1046 | "781": "chrome",
1047 | "782": "chrome",
1048 | "783": "chrome",
1049 | "784": "chrome",
1050 | "785": "chrome",
1051 | "786": "chrome",
1052 | "787": "chrome",
1053 | "788": "chrome",
1054 | "789": "chrome",
1055 | "790": "chrome",
1056 | "791": "chrome",
1057 | "792": "chrome",
1058 | "793": "chrome",
1059 | "794": "chrome",
1060 | "795": "chrome",
1061 | "796": "chrome",
1062 | "797": "chrome",
1063 | "798": "chrome",
1064 | "799": "chrome",
1065 | "800": "chrome",
1066 | "801": "chrome",
1067 | "802": "chrome",
1068 | "803": "internetexplorer",
1069 | "804": "internetexplorer",
1070 | "805": "internetexplorer",
1071 | "806": "internetexplorer",
1072 | "807": "internetexplorer",
1073 | "808": "internetexplorer",
1074 | "809": "internetexplorer",
1075 | "810": "internetexplorer",
1076 | "811": "internetexplorer",
1077 | "812": "internetexplorer",
1078 | "813": "internetexplorer",
1079 | "814": "internetexplorer",
1080 | "815": "internetexplorer",
1081 | "816": "internetexplorer",
1082 | "817": "internetexplorer",
1083 | "818": "internetexplorer",
1084 | "819": "internetexplorer",
1085 | "820": "internetexplorer",
1086 | "821": "internetexplorer",
1087 | "822": "internetexplorer",
1088 | "823": "internetexplorer",
1089 | "824": "internetexplorer",
1090 | "825": "internetexplorer",
1091 | "826": "internetexplorer",
1092 | "827": "internetexplorer",
1093 | "828": "internetexplorer",
1094 | "829": "internetexplorer",
1095 | "830": "internetexplorer",
1096 | "831": "internetexplorer",
1097 | "832": "internetexplorer",
1098 | "833": "internetexplorer",
1099 | "834": "internetexplorer",
1100 | "835": "internetexplorer",
1101 | "836": "internetexplorer",
1102 | "837": "internetexplorer",
1103 | "838": "internetexplorer",
1104 | "839": "firefox",
1105 | "840": "firefox",
1106 | "841": "firefox",
1107 | "842": "firefox",
1108 | "843": "firefox",
1109 | "844": "firefox",
1110 | "845": "firefox",
1111 | "846": "firefox",
1112 | "847": "firefox",
1113 | "848": "firefox",
1114 | "849": "firefox",
1115 | "850": "firefox",
1116 | "851": "firefox",
1117 | "852": "firefox",
1118 | "853": "firefox",
1119 | "854": "firefox",
1120 | "855": "firefox",
1121 | "856": "firefox",
1122 | "857": "firefox",
1123 | "858": "firefox",
1124 | "859": "firefox",
1125 | "860": "firefox",
1126 | "861": "firefox",
1127 | "862": "firefox",
1128 | "863": "firefox",
1129 | "864": "firefox",
1130 | "865": "firefox",
1131 | "866": "firefox",
1132 | "867": "firefox",
1133 | "868": "firefox",
1134 | "869": "firefox",
1135 | "870": "firefox",
1136 | "871": "firefox",
1137 | "872": "firefox",
1138 | "873": "firefox",
1139 | "874": "firefox",
1140 | "875": "firefox",
1141 | "876": "firefox",
1142 | "877": "firefox",
1143 | "878": "firefox",
1144 | "879": "firefox",
1145 | "880": "firefox",
1146 | "881": "firefox",
1147 | "882": "firefox",
1148 | "883": "firefox",
1149 | "884": "firefox",
1150 | "885": "firefox",
1151 | "886": "firefox",
1152 | "887": "firefox",
1153 | "888": "firefox",
1154 | "889": "firefox",
1155 | "890": "firefox",
1156 | "891": "firefox",
1157 | "892": "firefox",
1158 | "893": "firefox",
1159 | "894": "firefox",
1160 | "895": "firefox",
1161 | "896": "firefox",
1162 | "897": "firefox",
1163 | "898": "firefox",
1164 | "899": "firefox",
1165 | "900": "firefox",
1166 | "901": "firefox",
1167 | "902": "firefox",
1168 | "903": "firefox",
1169 | "904": "firefox",
1170 | "905": "firefox",
1171 | "906": "firefox",
1172 | "907": "firefox",
1173 | "908": "firefox",
1174 | "909": "firefox",
1175 | "910": "firefox",
1176 | "911": "firefox",
1177 | "912": "firefox",
1178 | "913": "firefox",
1179 | "914": "firefox",
1180 | "915": "firefox",
1181 | "916": "firefox",
1182 | "917": "firefox",
1183 | "918": "firefox",
1184 | "919": "firefox",
1185 | "920": "firefox",
1186 | "921": "firefox",
1187 | "922": "firefox",
1188 | "923": "firefox",
1189 | "924": "firefox",
1190 | "925": "firefox",
1191 | "926": "firefox",
1192 | "927": "firefox",
1193 | "928": "firefox",
1194 | "929": "firefox",
1195 | "930": "firefox",
1196 | "931": "firefox",
1197 | "932": "firefox",
1198 | "933": "firefox",
1199 | "934": "firefox",
1200 | "935": "safari",
1201 | "936": "safari",
1202 | "937": "safari",
1203 | "938": "safari",
1204 | "939": "safari",
1205 | "940": "safari",
1206 | "941": "safari",
1207 | "942": "safari",
1208 | "943": "safari",
1209 | "944": "safari",
1210 | "945": "safari",
1211 | "946": "safari",
1212 | "947": "safari",
1213 | "948": "safari",
1214 | "949": "safari",
1215 | "950": "safari",
1216 | "951": "safari",
1217 | "952": "safari",
1218 | "953": "safari",
1219 | "954": "safari",
1220 | "955": "safari",
1221 | "956": "safari",
1222 | "957": "safari",
1223 | "958": "safari",
1224 | "959": "safari",
1225 | "960": "safari",
1226 | "961": "safari",
1227 | "962": "safari",
1228 | "963": "safari",
1229 | "964": "safari",
1230 | "965": "safari",
1231 | "966": "safari",
1232 | "967": "safari",
1233 | "968": "opera",
1234 | "969": "opera",
1235 | "970": "opera",
1236 | "971": "opera",
1237 | "972": "opera",
1238 | "973": "opera",
1239 | "974": "opera",
1240 | "975": "opera",
1241 | "976": "opera",
1242 | "977": "opera",
1243 | "978": "opera",
1244 | "979": "opera",
1245 | "980": "opera",
1246 | "981": "opera",
1247 | "982": "opera",
1248 | "983": "opera",
1249 | "984": "opera"
1250 | }
1251 | }
1252 |
--------------------------------------------------------------------------------