前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫 爬取美团网酒店信息

python爬虫 爬取美团网酒店信息

作者头像
快学Python
发布2021-08-09 10:05:06
1.8K0
发布2021-08-09 10:05:06
举报
文章被收录于专栏:快学Python

作者:叶庭云

源自:快学python

东隅已逝,桑榆非晚。

希望你每天都可以有所获,有所得!

一、分析网页

爬取美团网成都地区的酒店信息

网站的页面是 JavaScript 渲染而成的,我们所看到的内容都是网页加载后又执行了JavaScript代码之后才呈现出来的,因此这些数据并不存在于原始 HTML 代码中,而 requests 仅仅抓取的是原始 HTML 代码。抓取这种类型网站的页面数据,解决方案如下:

分析 Ajax,很多数据可能是经过 Ajax 请求时候获取的,所以可以分析其接口。

在XHR里可以找到,Request URL有几个关键参数,uuid和cityId是城市标识,offset偏移量可以控制翻页,分析网页发现,第x页的offset为:(x-1)*20,limit表示每页有20条信息,startDay和endDay为当前的日期。

在Preview里可以找到每页的20条信息

模拟JavaScript渲染过程,直接抓取渲染后的结果。

selenium和pyppeteer爬虫就是用的这种方法

二、爬取酒店信息

代码语言:javascript
复制

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。

结语

欢迎大家关注我的公众号,如果觉得写的不错,记得三连,分享给你的小伙伴呦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 快学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、分析网页
  • 二、爬取酒店信息
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档