如何基于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类定义和类继承详解
May 08 Python
Python中的choice()方法使用详解
May 15 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
python机器人运动范围问题的解答
Apr 29 Python
Django-imagekit的使用详解
Jul 06 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
Python pygame实现中国象棋单机版源码
Jun 20 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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语法(3)
2006/10/09 PHP
php SQL防注入代码集合
2008/04/25 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
战友聚会邀请函
2014/01/18 职场文书
协议书的格式
2014/04/23 职场文书
跳蚤市场口号
2014/06/13 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
vue使用element-ui按需引入
2022/05/20 Vue.js
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL