如何基于Python爬虫爬取美团酒店信息


Posted in Python onNovember 03, 2020

一、分析网页

网站的页面是 JavaScript 渲染而成的,我们所看到的内容都是网页加载后又执行了JavaScript代码之后才呈现出来的,因此这些数据并不存在于原始 HTML 代码中,而 requests 仅仅抓取的是原始 HTML 代码。抓取这种类型网站的页面数据,解决方案如下:

分析 Ajax,很多数据可能是经过 Ajax 请求时候获取的,所以可以分析其接口。

如何基于Python爬虫爬取美团酒店信息

在XHR里可以找到,Request URL有几个关键参数,uuid和cityId是城市标识,offset偏移量可以控制翻页,分析网页发现,第x页的offset为:(x-1)*20,limit表示每页有20条信息,startDay和endDay为当前的日期。

如何基于Python爬虫爬取美团酒店信息

在Preview里可以找到每页的20条信息

如何基于Python爬虫爬取美团酒店信息

模拟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。

如何基于Python爬虫爬取美团酒店信息

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python操作 hbase 数据的方法
Dec 18 Python
python实现可视化动态CPU性能监控
Jun 21 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python获取txt文件词向量过程详解
Jul 05 Python
python监控nginx端口和进程状态
Sep 06 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
pytorch 求网络模型参数实例
Dec 30 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
python如何进入交互模式
Jul 06 Python
python zip()函数的使用示例
Sep 23 Python
python实现剪贴板的操作
Jul 01 Python
python import 上级目录的导入
Nov 03 #Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 #Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 #Python
python中not、and和or的优先级与详细用法介绍
Nov 03 #Python
如何基于Python按行合并两个txt
Nov 03 #Python
Python txt文件如何转换成字典
Nov 03 #Python
Python headers请求头如何实现快速添加
Nov 03 #Python
You might like
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
node.js环境搭建图文详解
2018/09/19 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python itertools模块详解
2015/05/09 Python
Python算法之图的遍历
2017/11/16 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
详解如何修改python中字典的键和值
2020/09/29 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
北京申奥口号
2014/06/19 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
租房协议书范例
2014/10/14 职场文书
小学运动会加油词
2015/07/18 职场文书