吴裕雄--天生自然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行.海伦的样本主 ...
随机推荐
- Go字符串
1. 字符串的声明是使用 package main import "fmt" func main() { /* Go中的字符串是一个字节的切片. 可以通过将其内容封装在“”中来创建 ...
- 前端之CSS基础篇
CSS介绍 什么是CSS? CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS ...
- HttpClient与TestNG结合
1.HTTPclient插件的安装 在maven项目的pom.xml中引用HTTPclient包,如下 <dependencies> <dependency> <grou ...
- swing开发一个修改项目数据库连接参数配置文件
我们在开发web项目中,经常有properties配置文件配置数据库连接参数,每次修改的时候还要去找到配置文件,感觉有点麻烦,就用swing做了个小工具修改参数,运行界面如下: =========== ...
- C:函数 注意点
形参 在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以,形参里的变量不能赋值. C不像C++里一样可 ...
- dockerfile的编写参数
注意细节 “#”号开头是注释 ,指令不区分大小写,顺序执行 FROM 指定基础镜像:注意必须是文件里第一个非注释行 ENV name 值 设置变量,注意没有=号 变量引用 ${name:-chenxi ...
- JupyterLab远程访问配置方法(CentOS7)
下载 Anaconda3安装包,并执行安装命令: bash Anaconda3-2019.07-Linux-x86_64.sh 确定安装并初始化: Do you wish the installer ...
- Qt QML Component 学习笔记
简介 Component是Qt封装好的.只暴露必要接口的QML类型,可以重复利用.一个QML组件就像一个黑盒子,它通过属性.信号.函数和外部世界交互. 一个Component既可以定义在独立的QML文 ...
- java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme t
异常信息: Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied b ...
- make工具简介
在Linux C/C++的开发过程中,当源代码文件较少时,我们可以手动使用gcc或g++进行编译链接,但是当源代码文件较多且依赖变得复杂时,我们就需要一种简单好用的工具来帮助我们管理.于是,make应 ...