欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-02 11:30:20
一、分析网页网站的页面是 javascript 渲染而成的,我们所看到的内容都是网页加载后又执行了javascript代码之后才呈现出来的,因此这些数据并不存在于原始 html 代码中,而 reque...

一、分析网页

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

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