吴裕雄--天生自然PYTHON爬虫:爬取某一大型电商网站的商品数据(效率优化以及代码容错处理)
这篇博文主要是对我的这篇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爬虫:爬取某一大型电商网站的商品数据(效率优化以及代码容错处理)的更多相关文章
- 小白学 Python 爬虫:Selenium 获取某大型电商网站商品信息
目标 先介绍下我们本篇文章的目标,如图: 本篇文章计划获取商品的一些基本信息,如名称.商店.价格.是否自营.图片路径等等. 准备 首先要确认自己本地已经安装好了 Selenium 包括 Chrome ...
- 吴裕雄--天生自然PYTHON爬虫:使用Selenium爬取大型电商网站数据
用python爬取动态网页时,普通的requests,urllib2无法实现.例如有些网站点击下一页时,会加载新的内容,但是网页的URL却没有改变(没有传入页码相关的参数),requests.urll ...
- 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中
1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...
- 吴裕雄--天生自然PYTHON爬虫:使用Scrapy抓取股票行情
Scrapy框架它能够帮助提升爬虫的效率,从而更好地实现爬虫.Scrapy是一个为了抓取网页数据.提取结构性数据而编写的应用框架,该框架是封装的,包含request异步调度和处理.下载器(多线程的Do ...
- 吴裕雄--天生自然PYTHON爬虫:使用BeautifulSoup解析中国旅游网页数据
import requests from bs4 import BeautifulSoup url = "http://www.cntour.cn/" strhtml = requ ...
- 吴裕雄--天生自然PYTHON爬虫:用API爬出天气预报信息
天气预报网址:https://id.heweather.com/,这个网站是需要注册获取一个个人认证后台密钥key的,并且每个人都有访问次数的限制,这个key就是访问API的钥匙. 这个key现在是要 ...
- 吴裕雄--天生自然python爬虫:使用requests模块的get和post方式抓取中国旅游网站和有道翻译网站翻译内容数据
import requests url = 'http://www.cntour.cn/' strhtml = requests.get(url) print(strhtml.text) URL='h ...
- 吴裕雄--天生自然PYTHON爬虫:爬虫攻防战
我们在开发者模式下不仅可以找到URL.Form Data,还可以在Request headers 中构造浏览器的请求头,封装自己.服务器识别浏览器访问的方法就是判断keywor是否为Request h ...
- 吴裕雄--天生自然python机器学习:使用K-近邻算法改进约会网站的配对效果
在约会网站使用K-近邻算法 准备数据:从文本文件中解析数据 海伦收集约会数据巳经有了一段时间,她把这些数据存放在文本文件(1如1^及抓 比加 中,每 个样本数据占据一行,总共有1000行.海伦的样本主 ...
随机推荐
- layuiAdmin pro v1.x 【单页版】开发者文档
layuiAdmin std v1.x [iframe版]开发者文档 题外 该文档适用于 layuiAdmin 专业版(单页面),阅读之前请务必确认是否与你使用的版本对应. 熟练掌握 layuiAdm ...
- windows安装jenkins及ant/maven/jdk配置
一.jenkins安装 下载地址:https://jenkins.io/download/,下载下来为一个war文件 (1)第一种启动方式,电脑一启动,jenkins会自动运行 命运行运行 java ...
- QT写的一个小工具:阿里云MQTT连接参数生成器.
一.工具介绍. 最近在研究MQTT协议联网的一些问题,现在主流的物联网平台都支持MQTT协议. 在做阿里云平台连接测试的时候,连接参数的生成没有好用的工具, 所以就自己写了一个. 这个工具主要用于阿里 ...
- Java内存模型(JMM)那些事
本文是库存文章,去年年底学习了慕课网的并发编程课程,今年年初看完了<深入理解Java虚拟机>这本书,但是很多内容忘得差不多了,打算写写博客回忆一下那些忘在脑后的知识点. 温故而知新 更多J ...
- opencv:图形绘制与填充
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- js遍历传参到html
<p id="subp" hidden><button id= "upsub"shiro:hasPermission="sys:me ...
- 定时备份mysql数据库的shell脚本
最近项目需要定时备份mysql数据库的数据,根据需求写了一份定时备份mysql数据库的脚本. -h mysql的地址 默认为localhost -P 端口号 默认为3306 -u 用户 默认为r ...
- pip 换源
pip 换源 pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.ed ...
- MySQL8.0.11安装后,使用CMD无法启动mysql服务
首先,先把mysql的bin路径添加到系统环境变量 这样做可以,直接进入CMD后执行mysql服务,不需要进入mysql的bin文件路径去执行. 第一步:在MySQL的安装文件的bin目录(例如:C: ...
- redhat7.6 配置主从DNS
主DNS配置include指向的配置文件 /etc/named.rfc1912.zone 下面图片配置内容/etc/named.rfc1912.zones 从DNS配置 /etc/named.conf ...