如何基于Python爬虫爬取美团酒店信息

一、分析网页

网站的页面是 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爬虫爬取美团酒店信息

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持免费资源网。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容