如何基于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迭代器和生成器介绍
Mar 06 Python
python使用pil生成缩略图的方法
Mar 26 Python
python随机生成指定长度密码的方法
Apr 04 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
Python 正则表达式实现计算器功能
Apr 29 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
Python3匿名函数lambda介绍与使用示例
May 18 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
如何教少儿学习Python编程
Jul 10 Python
python基于turtle绘制几何图形
Jun 15 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实现文件安全下载
2006/10/09 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
为什么说python更适合树莓派编程
2020/07/20 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
生产部主管岗位职责
2014/01/06 职场文书
中年人生感言
2014/02/04 职场文书
体操比赛口号
2014/06/10 职场文书
采购部长岗位职责
2014/06/13 职场文书
公务员培的训心得体会
2014/09/01 职场文书
行政申诉状范文
2015/05/20 职场文书
春节慰问简报
2015/07/21 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS