如何基于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生成器实现微线程编程的教程
Apr 13 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
Python的argparse库使用详解
Oct 09 Python
pycharm 配置远程解释器的方法
Oct 28 Python
pandas分区间,算频率的实例
Jul 04 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
Python中X[:,0]和X[:,1]的用法
May 10 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
APMServ使用说明
2006/10/23 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现矩阵乘法的方法
2015/06/28 Python
Python3匿名函数用法示例
2018/07/25 Python
python读取xlsx的方法
2018/12/25 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
Overload和Override的区别
2012/09/02 面试题
生产车间班组长岗位职责
2014/01/06 职场文书
大学生创业计划书的用途
2014/01/08 职场文书
违反学校规定检讨书
2014/01/18 职场文书
开展读书活动总结
2014/06/30 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
拾金不昧表扬信
2015/01/16 职场文书
地球一小时活动总结
2015/02/27 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang