如何基于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的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
12步教你理解Python装饰器
Feb 25 Python
用Python解决计数原理问题的方法
Aug 04 Python
python中正则表达式的使用方法
Feb 25 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
Python字典的基础操作
Nov 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
php微信支付之APP支付方法
2015/03/04 PHP
取得传值的函数
2006/10/27 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
vue axios用法教程详解
2017/07/23 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
PyQt5每天必学之切换按钮
2020/08/20 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
css3学习心得分享
2013/08/19 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
傲盾软件面试题
2015/08/17 面试题
辞旧迎新演讲稿
2014/09/15 职场文书
车辆年审委托书范本
2014/09/18 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
服务行业标语口号
2015/12/26 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python