如何基于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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
利用python画出折线图
Jul 26 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
Apr 11 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
python的time模块和datetime模块实例解析
Nov 29 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
基于Python实现粒子滤波效果
Dec 01 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 Python
Python Pandas 删除列操作
Mar 16 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访问带有密码的Redis方法示例
2017/02/09 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
js实现拖拽功能
2017/03/01 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
python采用getopt解析命令行输入参数实例
2014/09/30 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python入门教程之if语句的用法
2015/05/14 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
一些高难度的SQL面试题
2016/11/29 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
自主招生自荐信范文
2013/12/04 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
毕业设计致谢词
2015/05/14 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
李强优秀员工观后感
2015/06/16 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript