如何基于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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
python关闭windows进程的方法
Apr 18 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
python random从集合中随机选择元素的方法
Jan 23 Python
python如何实现异步调用函数执行
Jul 08 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
将python安装信息加入注册表的示例
Nov 20 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
python实现简易版学生成绩管理系统
Jun 22 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静态类
2006/11/25 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
php处理带有中文URL的方法
2016/07/11 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
python梯度下降法的简单示例
2018/08/31 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
超市采购员岗位职责
2014/02/01 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
2014年三万活动总结
2014/04/26 职场文书
激励口号大全
2014/06/17 职场文书
医学求职自荐信
2014/06/21 职场文书
个人自荐书怎么写
2015/03/26 职场文书
酒店员工手册范本
2015/05/14 职场文书
2015教师节通讯稿
2015/07/20 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
linux中nohup和后台运行进程查看及终止
2021/06/24 Python