如何基于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 相关文章推荐
django基础之数据库操作方法(详解)
May 24 Python
Python编程实现蚁群算法详解
Nov 13 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
python从入门到精通 windows安装python图文教程
May 18 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
python实现程序重启和系统重启方式
Apr 16 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 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 不错的学习资料
2009/02/06 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php实现的农历算法实例
2015/08/11 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
JavaScript中的style.display属性操作
2013/03/27 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
彻底理解js面向对象之继承
2018/02/04 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python对json的相关操作实例详解
2017/01/04 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
2019年.net常见面试问题
2012/02/12 面试题
《小猪家的桃花树》教学反思
2014/04/11 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
SQL Server中锁的用法
2022/05/20 SQL Server