如何基于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操作MongoDB详解及实例
May 18 Python
Python构建网页爬虫原理分析
Dec 19 Python
Python通用循环的构造方法实例分析
Dec 19 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
python批量修改图片尺寸,并保存指定路径的实现方法
Jul 04 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
python中几种自动微分库解析
Aug 29 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
Django debug为True时,css加载失败的解决方案
Apr 24 Python
python 命令行传参方法总结
May 25 Python
Python自动化测试PO模型封装过程详解
Jun 22 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开发需要注意的安全问题
2010/09/01 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
浅析javascript 定时器
2014/12/23 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
党校培训思想汇报
2014/01/03 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
中学生自我评价范文
2015/03/03 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
Java线程的6种状态与生命周期
2022/05/11 Java/Android