这篇博文主要是对我的这篇https://www.cnblogs.com/tszr/p/12198054.html爬虫效率的优化,目的是为了提高爬虫效率。

可以根据出发地同时调用多个CPU,每个CPU运行一个出发地的脚本,如果你的电脑有8个CPU,那么将会每次同时获取8个出发地的数据。

代码如下:

import time
import json
import pymongo
import requests
import urllib.request #使用MongoDB创建数据库、表
client = pymongo.MongoClient('localhost',27017)
book_qunar = client['qunarr']
sheet_qunar_zyx = book_qunar['qunar_zyxx'] def get_list(dep,item):
url = 'https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep={}&query={}&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery={}&limit=0,24&includeAD=true&qsact=search'.format(urllib.request.quote(dep),urllib.request.quote(item),urllib.request.quote(item))
time.sleep(3)
strhtml = requests.get(url)
#获取当前目的地的产品数量
#这里做异常处理,如果这条语句出错将会结束当前这个运行
try:
routeCount = int(strhtml.json()['data']['limit']['routeCount'])
except:
return
for limit in range(0,routeCount,24):
url = 'https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep={}&query={}&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery={}&limit={},24&includeAD=true&qsact=search'.format(urllib.request.quote(dep),urllib.request.quote(item),urllib.request.quote(item),limit)
time.sleep(3)
strhtml = requests.get(url)
#用一个字典保存当前这个产品的信息
result = {
'date':time.strftime('%Y-%m-%d',time.localtime(time.time())),
'dep':dep,
'arrive':item,
'limit':limit,
'result':strhtml.json()
}
#向数据库中插入这条产品信息记录
sheet_qunar_zyx.insert_one(result)
print('成功!') def connect_mongo():
client = pymongo.MongoClient('localhost',27017)
book_qunar = client['qunarr']
return book_qunar['qunar_zyxx'] def get_json(url):
strhtml = requests.get(url)
time.sleep(3)
return strhtml.json() def get_all_data(dep):
a = []
url = 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))
arrive_dict = get_json(url)
for arr_item in arrive_dict['data']:
for arr_item_1 in arr_item['subModules']:
for query in arr_item_1['items']:
#如果当前这个目的地不在a中的话,那就添加进去,否则不添加,这样就可以达到目的地去重的目的了
if(query['query'] not in a):
a.append(query['query'])
#逐个地取出当前出发点对应的目的地item
for item in a:
get_list(dep,item) #起点
dep_list = '''
马鞍山
茂名
眉山
梅州
绵阳
牡丹江
武汉
乌鲁木齐
万宁
潍坊
威海
渭南
文昌
文山
温州
乌海
芜湖
五家渠市
乌兰察布
武威
无锡
武夷山市
五指山
吴忠
梧州
郑州
枣庄
彰化
张家界
张家口
张掖
漳州
湛江
肇庆
昭通
镇江
中山
中卫
周口
舟山
珠海
驻马店
株洲
淄博
自贡
资阳
遵义
日喀则
日照
瑞金市
北京
白城
百色
白沙
白山
白银
保定
宝鸡
保山
保亭
包头
巴彦淖尔
巴音郭楞
巴中
北海
蚌埠
本溪
毕节
滨州
博尔塔拉
亳州
上海
沈阳
石家庄
三门峡
三明
三沙
三亚
商洛
商丘
上饶
山南
汕头
汕尾
韶关
绍兴
邵阳
神农架
深圳
石河子
十堰
石嘴山
双鸭山
朔州
四平
松原
绥化
遂宁
随州
宿迁
宿州
苏州
济南
佳木斯
吉安
江门
焦作
嘉兴
嘉峪关
揭阳
吉林市
金昌
晋城
景德镇
荆门
荆州
金华
济宁
晋中
锦州
九江
酒泉
鸡西
济源
长春
长沙
成都
重庆
沧州
常德
昌都
长葛市
昌吉
长治
常州
巢湖
朝阳市
潮州
承德
澄迈
郴州
赤峰
池州
崇左
楚雄
滁州
西安
香港
西宁
厦门
湘潭
湘西
襄阳
咸宁
仙桃
咸阳
孝感
西昌市
锡林郭勒盟
西南中沙群岛办事处
兴安盟
邢台
新乡
信阳
新余
忻州
西双版纳
宣城
许昌
徐州
黔东南
潜江
黔南
黔西南
青岛
庆阳
清远
秦皇岛
钦州
琼海
琼中
齐齐哈尔
七台河
泉州
曲靖
衢州
南昌
南京
南宁
南充
南平
南通
南投
南阳
那曲
内江
宁波
宁德
怒江
台北
太原
天津
塔城地区
泰安
台中
台州
泰州
唐山
天水
铁岭
铜川
通化
通辽
铜陵
铜仁
吐鲁番
图木舒克
屯昌
鄂尔多斯
恩施
鄂州
大理
大连
丹东
淡水
儋州
大庆
大同
大兴安岭
达州
德宏
德阳
德州市
定安
定西
迪庆
东方
东莞
东营
敦煌市
兰州
拉萨
来宾
莱芜
廊坊
乐东
乐山
凉山州
连云港
聊城
辽阳
辽源
丽江
临沧
临汾
临高
陵水
临夏
临沂
林芝
丽水
六安
六盘水
柳州
陇南
龙岩
娄底
漯河
洛阳
泸州
吕梁
澳门
阿坝州
阿克苏地区
阿拉尔
阿拉善盟
阿勒泰
阿里
安康
安庆
鞍山
安顺
安阳
广州
贵阳
甘南
赣州
甘孜州
高雄
广安
广元
贵港
桂林
果洛藏族自治州
固原
昆明
开封
喀什
克拉玛依
克孜勒苏柯尔克孜
克孜勒苏
盘锦
攀枝花
平顶山市
平凉
萍乡
普洱
普宁
莆田
濮阳
福州
防城港
佛山
抚顺
阜新
阜阳
抚州
银川
雅安
延安
延边
盐城
阳江
阳泉
扬州
延吉市
烟台
宜宾
宜昌
伊春
宜春
伊犁
伊犁哈萨克自治州
营口
鹰潭
义乌市
益阳
永州
岳阳
玉林
榆林
运城
云浮
玉树藏族自治州
玉溪
哈尔滨
海口
杭州
合肥
呼和浩特
海北藏族自治州
海东地区
海南藏族自治州
海西蒙古族藏族自治州
哈密
邯郸
汉中
鹤壁
河池
鹤岗
黑河
衡水
衡阳
和田
河源
菏泽
贺州
红河
淮安
淮北
怀化
淮南
黄冈
黄南藏族自治州
黄山
黄石
惠州
葫芦岛
呼伦贝尔
湖州
'''
#多进程爬虫用的库是Pool,这个函数可以自定义多进程的数量,不设置时就代表默认有多少个CPU就开多少个进程。
#最后使用pool.map()将第二个参数映射到第一个参数(函数)上。
from multiprocessing import Pool if __name__ == '__main__':
pool = Pool()
pool.map(get_all_data,dep_list.split())

吴裕雄--天生自然PYTHON爬虫:爬取某一大型电商网站的商品数据(效率优化以及代码容错处理)的更多相关文章

  1. 小白学 Python 爬虫:Selenium 获取某大型电商网站商品信息

    目标 先介绍下我们本篇文章的目标,如图: 本篇文章计划获取商品的一些基本信息,如名称.商店.价格.是否自营.图片路径等等. 准备 首先要确认自己本地已经安装好了 Selenium 包括 Chrome ...

  2. 吴裕雄--天生自然PYTHON爬虫:使用Selenium爬取大型电商网站数据

    用python爬取动态网页时,普通的requests,urllib2无法实现.例如有些网站点击下一页时,会加载新的内容,但是网页的URL却没有改变(没有传入页码相关的参数),requests.urll ...

  3. 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中

    1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...

  4. 吴裕雄--天生自然PYTHON爬虫:使用Scrapy抓取股票行情

    Scrapy框架它能够帮助提升爬虫的效率,从而更好地实现爬虫.Scrapy是一个为了抓取网页数据.提取结构性数据而编写的应用框架,该框架是封装的,包含request异步调度和处理.下载器(多线程的Do ...

  5. 吴裕雄--天生自然PYTHON爬虫:使用BeautifulSoup解析中国旅游网页数据

    import requests from bs4 import BeautifulSoup url = "http://www.cntour.cn/" strhtml = requ ...

  6. 吴裕雄--天生自然PYTHON爬虫:用API爬出天气预报信息

    天气预报网址:https://id.heweather.com/,这个网站是需要注册获取一个个人认证后台密钥key的,并且每个人都有访问次数的限制,这个key就是访问API的钥匙. 这个key现在是要 ...

  7. 吴裕雄--天生自然python爬虫:使用requests模块的get和post方式抓取中国旅游网站和有道翻译网站翻译内容数据

    import requests url = 'http://www.cntour.cn/' strhtml = requests.get(url) print(strhtml.text) URL='h ...

  8. 吴裕雄--天生自然PYTHON爬虫:爬虫攻防战

    我们在开发者模式下不仅可以找到URL.Form Data,还可以在Request headers 中构造浏览器的请求头,封装自己.服务器识别浏览器访问的方法就是判断keywor是否为Request h ...

  9. 吴裕雄--天生自然python机器学习:使用K-近邻算法改进约会网站的配对效果

    在约会网站使用K-近邻算法 准备数据:从文本文件中解析数据 海伦收集约会数据巳经有了一段时间,她把这些数据存放在文本文件(1如1^及抓 比加 中,每 个样本数据占据一行,总共有1000行.海伦的样本主 ...

随机推荐

  1. 素问 - 信贷和GDP

    摘自<小韭的学习圈> Q:近期看到2019年金融统计数据,全年人民币贷款增加16.81万亿元,同比多增6439亿元.这里有个问题我储备好久了,没有高人指点俺.请问2019年全年GDP近10 ...

  2. 使用Docker搭建Spark集群(用于实现网站流量实时分析模块)

    上一篇使用Docker搭建了Hadoop的完全分布式:使用Docker搭建Hadoop集群(伪分布式与完全分布式),本次记录搭建spark集群,使用两者同时来实现之前一直未完成的项目:网站日志流量分析 ...

  3. C++记录(一)

    1 extern 符表示该变量不是当前作用域定义的,用于声明. 如extern i;表示i不是当前作用域里的,是其他某个include的cpp文件里的变量. 2 int *p=0;相当于初始化p为空指 ...

  4. Flask 学习之flask入门

    一.Flask的简单介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...

  5. 6_3 矩阵链乘(UVa424)<用栈实现简单的表达式解析>

    假设你必须做A*B*C*D*E的运算,在这里A,B,C,D,E都是矩阵(matrix).由于矩阵相乘具有连接性(associative),所以相乘的顺序可以是任意的.然而所需要的基本乘法数却与不尽相同 ...

  6. firefox插件hostadmin自由切换host

    在Mac下firefox插件hostadmin切换host,遇到的第一个问题就是提示权限不足,解决办法,在终端输入以下命令即可: sudo chmod og+w /etc/hosts chmod修改权 ...

  7. SVG和canvas的区别

    1.Canvas 是用JavaScript 操作动态生成的, SVG 则是使用XML静态描述生成的; 2.Canvas 基于位图,简单来说就是图片放大会影响到显示的效果,造成不好的影响,SVG 基于矢 ...

  8. JS-条件语句5准则

    准则: 1.多重判断时使用 Array.includes 2.更少的嵌套,尽早 return 3.使用默认参数和解构 4.倾向于遍历对象而不是 Switch 语句 5.对 所有/部分 判断使用 Arr ...

  9. Oracle_11g_x64的安装与完全卸载

    安装: https://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html 完全卸载: https://blog.csdn.net/m0_3 ...

  10. sort的使用

    sort主要是用来排序的,可以用自定义的函数进行比较,也可以用系统的4中函数进行比较,即less(),greater(),less_equal(),greater_equal().但是我试了一下,发现 ...