(2、爬取某电商网站的商品数据)Python爬虫与数据清洗的进化
编写Python爬虫抓取网页数据 #生活知识# #编程教程#
工作流程分析
1、获取出发地点列表
2、获取目的地点列表
3、获取目的地产品列表
4、储存数据
1、以网站touch.qunar.com为例,从此Request URL中得知dep代表出发地,query和originalquery代表目的地,通过修改这两个参数就可以控制遍历整个平台自由行产品
遍历出所有出发地点:
import requests
url='https://touch.dujia.qunar.com/depCities.qunar'
strhtml=requests.get(url)
dep_dict=strhtml.json()
for dep_item in dep_dict['data']:
for dep in dep_dict['data'][dep_item]:
print(dep)
通过此页面找到不同出发地点对应的目的地。针对每个出发站点下的目的地,在获取出发地点的位置上定义一个空列表a,最后判断目的地是否已经在a中,没有的话添加进去,达到去重复的目的。
import requests
import urllib.request
url='https://touch.dujia.qunar.com/depCities.qunar'
strhtml=requests.get(url)
dep_dict=strhtml.json()
for dep_item in dep_dict['data']:
for dep in dep_dict['data'][dep_item]:
a=[]
print(dep)
url='https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))
strhtml=requests.get(url)
arrive_dict=strhtml.json()
for arr_item in arrive_dict['data']:
for arr_item_1 in arr_item['subModules']:
for query in arr_item_1['items']:
if query['query'] not in a:
a.append(query['query'])
print(a)
代码优化并将数据插入进MongoDB中
import requests
import urllib.request
import time
import pymongo
client = pymongo.MongoClient('localhost', 27017)
book_qunar = client['qunar']
sheet_qunar = book_qunar['sheet_qunar_zyx']
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,28&includeAD=true&qsact=search'.format(
urllib.request.quote(dep), urllib.request.quote(item), urllib.request.quote(item))
strhtml = get_json(url)
result = {
'date': time.strftime('%Y-%m-%d', time.localtime(time.time())),
'dep': dep,
'arrive': item,
'result': strhtml
}
print(result)
sheet_qunar.insert_one(result)
cookies={'cookies':'Cookie:xxx'}
def get_json(url):
strhtml = requests.get(url,cookies=cookies)
return strhtml.json()
if __name__ == "__main__":
url = 'https://touch.dujia.qunar.com/depCities.qunar'
dep_dict = get_json(url)
for dep_item in dep_dict['data']:
for dep in dep_dict['data'][dep_item]:
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']:
if query['query'] not in a:
a.append(query['query'])
for item in a:
get_list(dep, item)
爬虫效率优化(添加pool)
import requests
import urllib.request
import time
import pymongo
client = pymongo.MongoClient('localhost', 27017)
book_qunar = client['qunar']
sheet_qunar = book_qunar['sheet_qunar_zyx']
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,28&includeAD=true&qsact=search'.format(urllib.request.quote(dep), urllib.request.quote(item), urllib.request.quote(item))
strhtml = get_json(url)
result = {
'date': time.strftime('%Y-%m-%d', time.localtime(time.time())),
'dep': dep,
'arrive': item,
'result': strhtml
}
print(result)
sheet_qunar.insert_one(result)
cookies={'cookies':'Cookie:xxx'}
def get_json(url):
strhtml = requests.get(url.cookies=cookies)
time.sleep(1)
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']:
if query['query'] not in a:
a.append(query['query'])
for item in a:
get_list(dep, item)
dep_list='''
澳门
阿坝州
阿克苏地区
阿拉尔
阿拉善盟
阿勒泰
阿里
安康
安庆
鞍山
安顺
安阳
北京
白城
百色
白沙
白山
白银
保定
宝鸡
保山
保亭
包头
南阳
那曲
内江
宁波
宁德
怒江
此处省略300多个城市
商丘
上饶
山南
汕头
汕尾
韶关
绍兴
邵阳
神农架
深圳
石河子
十堰
石嘴山
珠海
驻马店
株洲
淄博
自贡
资阳
遵义
'''
此处多进程使用的库是Pool,Pool()不设定参数时默认开最高进程数(最多CPU数) ,使用pool.map将第二个参数映射到第一个参数(函数)上
from qunar import get_all_data
from qunar import dep_list
from multiprocessing import Pool
if __name__ == '__main__':
pool=Pool()
pool.map(get_all_data,dep_list.split())
网址:(2、爬取某电商网站的商品数据)Python爬虫与数据清洗的进化 https://www.yuejiaxmz.com/news/view/446604
相关内容
Python爬虫抓取基金数据分析、预测系统设计与实现——云诺说python爬虫代码
python爬虫与数据分析之《向往的生活爬取》
python爬取B站千万级数据,发现了这些热门UP主的秘密!
Python爬虫山东济南景点数据可视化和景点推荐系统 开题报告
消费者行为解码:社交媒体数据分析的商业智能洞察
《Python3爬虫、数据清洗和可视化实战》之阅读不懂处、主要代码总结(5
python基于大数据的食物推荐系统
日用品电商销售数据分析
推荐这三款自动化爬虫软件,非常实用!