如何基于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 相关文章推荐
python3中str(字符串)的使用教程
Mar 23 Python
Python中Django 后台自定义表单控件
Mar 28 Python
Python学习小技巧之列表项的拼接
May 20 Python
python实现猜单词小游戏
May 22 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
python3实现逐字输出的方法
Jan 23 Python
python实现桌面托盘气泡提示
Jul 29 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
Python自动采集微信联系人的实现示例
Feb 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
图解上海144收音机
2021/03/02 无线电
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
php for 循环使用的简单实例
2016/06/02 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
JavaScript事件列表解说
2006/12/22 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
python regex库实例用法总结
2021/01/03 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
端午节演讲稿
2014/05/23 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
营销计划书
2015/01/17 职场文书