吴裕雄--天生自然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行.海伦的样本主 ...
随机推荐
- jmeter实现IP欺骗
用jmeter模拟多个IP同时向一个目标发送请求 1.IP地址参数化 在csv文件中编辑参数化IP地址列表,参数化的IP需在同一个局域网,子网掩码相同(比如和客户端本机同一网段),如下 将csv列表中 ...
- P &R 12
Floorplan包含: IO floorplan: 涉及板级设计.封装设计的交互,接口协议(timing相关),对一些高速接口需要做特殊考虑(如信号完整性等). Power plan:芯片的电源和低 ...
- 一文搞懂vim复制粘贴
转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...
- php中的elseif和else if
以前的时候还没注意到,知道进入公司,看的代码多了点,时常看到elseif的分支,而我自己时常用的是else if,于是就注意到,他们既然都可以用,那么他们的却别在哪儿呢? 通过查询,原来,确实有点小小 ...
- sping中AOP
委托代理的概念: 委托类对象就是我们后面说到的"目标对象", 也就是需要[被]代理的对象 target代理类对象就是我们后面说到的"代理对象",目标对象就是需要 ...
- 吴裕雄--天生自然神经网络与深度学习实战Python+Keras+TensorFlow:LSTM网络层详解及其应用
from keras.layers import LSTM model = Sequential() model.add(embedding_layer) model.add(LSTM(32)) #当 ...
- Mybatis 的分页插件 PageHelper
我用的版本是PageHelper-4.1.1.Mybatis-3.3.0 PageHelper 依赖于 jsqlparser-0.9.4.jar 使用方法: 1.根据Mybatis的版本下载对应版 ...
- Shiro入门学习之shi.ini实现认证及源码分析(二)
一.Shiro.ini文件 1.文件说明 ①ini(InitializationFile)初始文件:Window系统文件扩展名 ②Shiro使用时可以连接数据库,也可以不连接数据库(可以使用shiro ...
- disconf---分布式配置管理平台的搭建(linux版本)
一.获取disconf的代码 地址:https://github.com/knightliao/disconf 二.搭建基础服务 ①redis,mysql,zookeeper在博主的其他博文中有相应搭 ...
- 使用JavaScript获取样式的属性值
1 . 在js中可以使用style属性来获取样式的属性值(只能获取内联样式的属性值) 语法格式为: HTML元素.style.样式属性; 2 . 在IE浏览器中,使用currentStyle来获取 ...