如何基于Python爬虫爬取美团酒店信息
作者:松鼠爱吃饼干 发布时间:2023-10-11 00:12:45
标签:Python,爬虫,爬取,美团,酒店,信息
一、分析网页
网站的页面是 JavaScript 渲染而成的,我们所看到的内容都是网页加载后又执行了JavaScript代码之后才呈现出来的,因此这些数据并不存在于原始 HTML 代码中,而 requests 仅仅抓取的是原始 HTML 代码。抓取这种类型网站的页面数据,解决方案如下:
分析 Ajax,很多数据可能是经过 Ajax 请求时候获取的,所以可以分析其接口。
在XHR里可以找到,Request URL有几个关键参数,uuid和cityId是城市标识,offset偏移量可以控制翻页,分析网页发现,第x页的offset为:(x-1)*20,limit表示每页有20条信息,startDay和endDay为当前的日期。
在Preview里可以找到每页的20条信息
模拟JavaScript渲染过程,直接抓取渲染后的结果。
selenium和pyppeteer爬虫就是用的这种方法
二、爬取酒店信息
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
url = "https://ihotel.meituan.com/hbsearch/HotelSearch"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36",
"Referer": "https://hotel.meituan.com/chengdu"
}
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(['酒店名称', '酒店地址', '酒店类型', '最低价', '评价', '评论数', '经度', '纬度'])
def hotel_data(x):
data = {
'utm_medium': 'pc',
'version_name': 999.9,
'cateId': 20,
'attr_28': 129,
'uuid': '5D4E443EC83DDD49B73F317921EAE16C7B492A634A67FA261773890F730A5932@1600263777783',
'cityId': 59,
'offset': x * 20,
'limit': 20,
'startDay': 20200916,
'endDay': 20200916,
'q': '', 'sort': 'defaults',
'X-FOR-WITH': '47zbBAV+k1e7QrnKt4lEVXrmtOE9w2OpFfGsKf539CDdXIw4r2V/qICcWVeNACGHWNbD6iL4huPyRVdkNJJwR6dqcoQMyzjUE3cQGWr6YZOwANQOlCSrZ7m1+aahwcnh/dTfaJLMZfxWaJQEISBuKbiMgDC8Vr4eaeWiYASkLl0ByB96MOUz7gfjUTbhlV0ZXvZ/ucwNcK3zxTQjmoBINsAY4HwpKQLpOV2IqV1CtPg=',
}
res = requests.get(url, headers=headers, params=data)
time.sleep(random.randint(1, 3))
results = json.loads(res.text)['data']['searchresult']
for con in results:
name = con['name'] # 酒店名称
addr = con['addr'] # 酒店地址
star = con['hotelStar'] # 酒店类型
price = con['lowestPrice'] # 最低价
scoreIntro = con['scoreIntro'] # 评价
comments = con['commentsCountDesc'] # 评论数
lng, lat = con['lng'], con['lat'] # 经纬度
data = [name, addr, star, price, scoreIntro, comments, lng, lat]
sheet.append(data)
logging.info(data)
程序运行成功,酒店信息保存到了Excel。
来源:https://www.cnblogs.com/hhh188764/p/13878195.html
0
投稿
猜你喜欢
- // 执行AJAX请求的通用函数//带一个参数,是包含一系列选项的对象function ajax(options){//如果用户没有提供某个
- 环境搭建python 3.xrequests 包re 包gooey包 (用于可视化)代码import requestsimport reim
- Eloquent: 关联模型简介数据库中的表经常性的关联其它的表。比如,一个博客文章可以有很多的评论,或者一个订单会关联一个用户。Eloqu
- 一、题目描述A:先输出提示语句,并接受用户输入的年、月。B:根据用户输入的年,先判断是否是闰年。C:根据用户输入的月来判断月的天数。D:用循
- 零、前言python代码中配置文件是必不可少的内容。常见的配置文件格式有很多中:ini、yaml、xml、properties、txt、py
- SvnPeer.php <?php /** * * This class for execute the external progr
- asp过滤留言中脏话的代码例子<!--#include file="../conn/dbconn1.asp"--&
- 在使用Django项目中,From表单提交了图片集合var formdata = new FormData();formdata.appen
- 问:如何让内联框架里面的网页背景透明?(用iframe嵌套一网页,怎么能够设置其背景为透明以便能显示父框架中网页的背景图?)答:这是需要 I
- 导语:使用 python-plotly 模块来进行压测数据的绘制,并且生成静态 html 页面结果展示。不少小伙伴在开发过程中都有对模块进行
- 本文实例为大家分享了Go实现文件上传的具体代码,供大家参考,具体内容如下文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进
- Python实现模拟时钟代码推荐# coding=utf8import sys, pygame, math, randomfrom pyga
- apply_async简介python在同一个线程中多次执行同一方法时,该方法执行耗时较长且每次执行过程及结果互不影响,如果只在主进程中执行
- 本文实例讲述了symfony2.4的twig中date用法。分享给大家供大家参考,具体如下:获得当前时间:{{ "now"
- 前言本文主要给大家介绍了关于Django自定义过滤器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:过滤器与函数d
- 网页编程中,在与数据库打交道的时候我们经常会碰到乱码的经常。本文就将介绍一种ASP读取MySQL数据库出现乱码的解决办法。情景再现:使用My
- 1. 将Oracle 10g client安装包copy到本地才能安装:2. 双击setup 的到:3. 稍后进入安装界面:4. 选择下一步
- 由于工作的需求,需要用python做一个类似网络爬虫的采集器。虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需
- asp连接sql server代码如下:dim connset conn = Serve
- 作者:AngelGavin 出处:CSDNInternet Explorer 5.0 对 XML 提供哪个级别的支持?Inter