python爬虫爬取美团西安美食数据
2018-05-23 18:11
351 查看
经历了一周的种种波折,参考了CSDN上N多博主的博客,终于搞定了美团西安美食数据,在此做简单记录:
愚蠢如我,不知如何让爬虫程序翻下一页,只好看了前后两页请求的网址有什么不同,后来发现第一页后缀是‘pn1’,第二页是‘pn2’,以此类推……所以手动查看了一共有15页之后,萌生了一个愚蠢的想法并实现了它,以下是部分代码:
target = 'http://xa.meituan.com/meishi/' head={} head['authorization']='your ClientId'(cookie倒数第几个参数) head['User-Agent'] = '' for i in range(16): if i==0: continue target_real=target+'pn'+str(i)+'/' req = requests.get(url=target_real,headers=head) html=req.text bf=BeautifulSoup(html,'lxml') texts=bf.find_all('script') text=texts[14].get_text().strip()(这部分也是很愚蠢的做法,实在是找不到别的方法了) text=text[19:-1] result=json.loads(text) result=result['poiLists'] result=result['poiInfos']以此挑出自己想要的部分数据,再经过简单处理之后便以为大功告成,在日报里向老板汇报了捷报“美团西安美食部分爬取完成”,今天早上十点多老板问我爬了多少家,我看了下一共四百多家,老板说有两三万餐饮,让我看看怎么回事
回到工位上,打开美团网页发现不管登不登录,只要不选任何条件,都是显示15页,然后我按照行政划分一个个打开,根本不是15页好吗,再譬如打开“长安区”,选择‘长安区全部’,显示有19页,我再分别将长安区的商圈一个个打开,加起来发现有大概39页,就算剃掉不满一页的情况,也远远不止19页,而且还有了一个发现,每一个商圈都有一个特定的ID,其url就是美团西安美食的url+b+ID+pn+页码,所以我决定按照行政区划分来获取数据,这时候问题就出现了,不可能把每一个商圈一共有多少页都手动查看一遍,于是想了以下办法:
for i in range(1,5,1):(每个商圈商家总数最多不超过50页) target='http://xa.meituan.com/meishi/'+'b'+str(item)+'/'+'pn'+str(i)+'/' head={} head['authorization']='your ClientID' head['User-Agent'] = '' req = requests.get(url=target,headers=head) html=req.text bf=BeautifulSoup(html,'lxml') texts=bf.find_all('script') text=texts[14].get_text().strip() text=text[19:-1] result=json.loads(text) result=result['poiLists'] result=result['poiInfos'] if result:(判断获取内容是否为空) print(target) for it in result: Info_list=[] Info_list.append('美团') Info_list.append('美食') Info_list.append(it['title']) Info_list.append(it['address']) writer.writerow(Info_list) time.sleep(3) else: break(若为空,直接跳出本层循环)下面是获取各个商圈ID的部分代码:
target = 'http://xa.meituan.com/meishi/' head={} head['authorization']='your ClientID' head['User-Agent'] = '' req = requests.get(url=target,headers=head) html=req.text bf=BeautifulSoup(html,'lxml') texts=bf.find_all('script') text=texts[14].get_text().strip() text=text[19:-1] result=json.loads(text) result=result['filters'] result=result['areas'] list=[] for item in result: for i in item['subAreas']: if i['name']=='全部':(不需要获取每个行政区第一个全部的ID,所以直接略过) continue list.append(i['id']) print(list)获取了每个商圈的ID之后,再根据url组成规则即可得到每个商圈的url(好像走了一点弯路了,获取的html里面直接有每个商圈的url)
以下是完整代码,根据自己需要可做修改:
#美团美食 # -*- coding:UTF-8 -*- import requests import time from bs4 import BeautifulSoup import json import csv with open(r'美团西安美食.csv',"w", newline='',encoding='UTF-8') as csvfile: writer = csv.writer(csvfile) writer.writerow(['网站名','品类','商家名称','地址']) target = 'http://xa.meituan.com/meishi/' head={} head['authorization']='your ClientID' head['User-Agent'] = '' req = requests.get(url=target,headers=head) html=req.text bf=BeautifulSoup(html,'lxml') texts=bf.find_all('script') text=texts[14].get_text().strip() text=text[19:-1] result=json.loads(text) result=result['filters'] result=result['areas'] list=[] for item in result: for i in item['subAreas']: if i['name']=='全部': continue list.append(i['id']) print(list) for item in list: for i in range(50): if i==0: continue target='http://xa.meituan.com/meishi/'+'b'+str(item)+'/'+'pn'+str(i)+'/' head={} head['authorization']='your ClientID' head['User-Agent'] = '' req = requests.get(url=target,headers=head) html=req.text bf=BeautifulSoup(html,'lxml') texts=bf.find_all('script') text=texts[14].get_text().strip() text=text[19:-1] result=json.loads(text) result=result['poiLists'] result=result['poiInfos'] if result: print(target) for it in result: Info_list=[] Info_list.append('美团') Info_list.append('美食') Info_list.append(it['title']) Info_list.append(it['address']) writer.writerow(Info_list) time.sleep(3) else: break print('Done')整理完毕 阅读更多
相关文章推荐
- 美团西安美食部分爬虫(修改版)(python)
- Python爬虫 - 获取美团美食数据
- 美团西安酒店数据爬取(Python)
- Python爬虫练习之一:抓取美团数据
- 07-爬虫的多线程调度 | 01.数据抓取 | Python
- python股票数据爬虫requests、etree、BeautifulSoup学习
- 自己初步了解python数据爬虫
- python数据分析之爬虫四:正则表达式
- Python-新浪微博爬虫采集数据
- 一个月带你入门Python爬虫,轻松爬取大规模数据
- python爬虫-->获取数据
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- python爬虫数据保存到本地各种格式的方法
- Python网络数据采集-创建爬虫
- [置顶] python爬虫实践——零基础快速入门(五)将爬取的数据存到本地
- python爬虫:从百度贴吧中爬数据
- Python爬虫实例_城市公交网络站点数据的爬取方法
- python爬虫获取郑大教务在线成绩数据