数据采集——爬虫篇(二):美团美食信息采集
2020-07-14 06:07
1296 查看
数据采集——爬虫篇(二):美团美食信息采集
.
1.分析美团美食网页的url参数构成
美团美食,地址:北京,搜索关键词:火锅
url:
https://bj.meituan.com/s/%E7%81%AB%E9%94%85/
url会有自动编码中文功能所以 火锅=%E7%81%AB%E9%94%85
通过关键词城市的url构造,解析当前url中的bj=北京,/s/后面跟搜索关键词
这样我们就可以了解到当前url的构造。
.
2.分析页面数据来源(F12开发者工具)
开启F12开发者工具,并且刷新当前页面:
可以看到切换到第二页时候,我们的url没有变化,网站也没有自动进行刷新跳转操作(web中ajax技术就是在保证页面不刷新,url不变化情况下进行数据加载的技术)
此时我们需要在开发者工具中找到xhr里面对应当前数据的响应文件
分析到这里可以得知 我们数据是以json格式交互
分析第二页的json文件请求地址与第三页json文件请求地址
第二页:
https://apimobile.meituan.com/group/v4/poi/pcsearch/1?uuid=xxx&userid=-1&limit=32&offset=32&cateId=-1&q=%E7%81%AB%E9%94%85
第三页:
https://apimobile.meituan.com/group/v4/poi/pcsearch/1?uuid=xxx&userid=-1&limit=32&offset=64&cateId=-1&q=%E7%81%AB%E9%94%85
对比发现offse参数每次翻页增加32
并且limit参数是一次请求的数据量,offse是数据请求的开始元素,q是搜索关键词poi/pcsearch/1?其中的1是北京城市的id编号。
.
3.构造请求抓取美团美食数据
接下来直接构造请求,循环访问每一页的数据,代码如下:
import requests import re def start(): for w in range(0, 1600, 32): #页码根据实际情况x32即可,我这里是设置50页为上限,为了避免设置页码过高或者数据过少情况,定义最大上限为1600-也就是50页,使用try-except来检测时候异常,异常跳过该页,一般作为无数据跳过该页处理 try: # 注意uuid后面参数空余将uuid后xxx替换为自己的uuid参数 url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/1?uuid=xxx&userid=-1&limit=32&offset='+str(w)+'&cateId=-1&q=%E7%81%AB%E9%94%85' #headers的数据可以在F12开发者工具下面的requests_headers中查看,需要实现选择如下headers信息 #必要情况 请求频繁 建议增加cookie参数在headers内 headers = { 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400', 'Host': 'apimobile.meituan.com', 'Origin': 'https://bj.meituan.com', 'Referer': 'https://bj.meituan.com/s/%E7%81%AB%E9%94%85/' } response = requests.get(url, headers=headers) #正则获取当前响应内容中的数据,因json方法无法针对店铺特有的title键值进行获取没所以采用正则 titles = re.findall('","title":"(.*?)","address":"', response.text) addresses = re.findall(',"address":"(.*?)",', response.text) avgprices = re.findall(',"avgprice":(.*?),', response.text) avgscores = re.findall(',"avgscore":(.*?),',response.text) comments = re.findall(',"comments":(.*?),',response.text) #输出当前返回数据的长度 是否为32 print(len(titles), len(addresses), len(avgprices), len(avgscores), len(comments)) for o in range(len(titles)): #循环遍历每一个值 写入文件中 title = titles[o] address = addresses[o] avgprice = avgprices[o] avgscore = avgscores[o] comment = comments[o] #写入本地文件 file_data(title, address, avgprice, avgscore, comment) #文件写入方法 def file_data(title, address, avgprice, avgscore, comment): data = { '店铺名称': title, '店铺地址': address, '平均消费价格': avgprice, '店铺评分': avgscore, '评价人数': comment } with open('美团美食.txt', 'a', encoding='utf-8')as fb: fb.write(json.dumps(data, ensure_ascii=False) + '\n') #ensure_ascii=False必须加因为json.dumps方法不关闭转码会导致出现乱码情况 if __name__ == '__main__': start()
运行结果如下:
本地文件:
共写入1024条数据
.
总结:
根据搜索词变化,城市变化,可以改变url中指定的参数来实现,同时也要记得变更headers中的指定参数,方法简单,多加练习即可熟悉ajax类型的数据抓取。 转载请注明出处!https://blog.csdn.net/dbldwang/article/details/106638364
相关文章推荐
- 网页爬虫技术之美团商家评论数据采集教程图解
- 如何使用爬虫采集美团外卖商家信息
- 动态网站数据采集 - 时光网电影信息爬虫
- python爬虫爬取美团西安美食数据
- 初识python爬虫 Python网络数据采集1.0 BeautifulSoup通过网站css爬取信息
- Python爬虫 - 获取美团美食数据
- python爬虫爬取“美团美食”汕头地区的所有店铺信息
- 如何使用淘宝商品信息采集爬虫-采集电商商品
- 爬虫 蜘蛛 信息采集
- 爬虫实战(二) 51job移动端数据采集
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 模型配置方式实现爬虫
- 美团西安美食部分爬虫(修改版)(python)
- python爬虫案例——东方财富股票数据采集
- python爬虫与数据分析实战,带你全方位了解所在城市酒店信息
- 网页爬虫之新浪微博网页数据的采集规则配置方法
- 四周实现爬虫系统(1)-抓取tripadvisor猫途鹰网站数据信息
- 网页爬虫实例:采集知乎话题信息
- 网页爬虫进阶系列之美团店铺信息爬虫制作
- 分享一个B站爬虫(爬取视频信息相关数据)