• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python爬虫练习:爬取美团网成都地区的酒店信息

python 搞java代码 3年前 (2022-05-21) 29次浏览 已收录 0个评论

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于快学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爬虫就是用的这种方法

二、爬取酒店信息

<code>logging.basicConfig(level=logging.INFO, format=<span class="hljs-string">"%(asctime)s - %(levelname)s: %(message)s")
url = <span class="hljs-string">"https://ihotel.meituan.com/hbsearch/HotelSearch"
headers = {
    <span class="hljs-string">"User-Agent": <span class="hljs-string">"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36",
    <span class="hljs-string">"Referer": <span class="hljs-string">"https://hotel.meituan.com/chengdu"
}
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append([<span class="hljs-string">"酒店名称", <span class="hljs-string">"酒店地址", <span class="hljs-string">"酒店类型", <span class="hljs-string">"最低价", <span class="hljs-string">"评价", <span class="hljs-string">"评论数", <span class="hljs-string">"经度", <span class="hljs-string">"纬度"])


<span class="hljs-function">def <span class="hljs-title">hotel_data(<span class="hljs-params">x):
    data = {
        <span class="hljs-string">"utm_medium": <span class="hljs-string">"pc",
        <span class="hljs-string">"version_name": <span class="hljs-number">999.9,
        <span class="hljs-string">"cateId": <span class="hljs-number">20,
        <span class="hljs-string">"attr_28": <span class="hljs-number">129,
        <span class="hljs-string">"uuid": <span class="hljs-string">"5D4E443EC83DDD49B73F317921EAE16C7B492A634A67FA261773890F730A5932@1600263777783",
        <span class="hljs-string">"cityId": <span class="hljs-number">59,
        <span class="hljs-string">"offset": x * <span class="hljs-number">20,
        <span class="hljs-string">"limit": <span class="hljs-number">20,
        <span class="hljs-string">"startDay": <span class="hljs-number">20200916,
        <span class="hljs-string">"endDay": <span class="hljs-number">20200916,
        <span class="hljs-string">"q": <span class="hljs-string">"", <span class="hljs-string">"sort": <span class="hljs-string">"defaults",
        <span class="hljs-string">"X-FOR-WITH": <span class="hljs-string">"47zbBAV+k1e7QrnKt4lEVXrmtOE9w2OpFfGsKf539CDdXIw4r2V/qICcWVeNACGHWNbD6iL4huPyRVdkNJJwR6dqcoQMyzjUE3cQGWr6YZOwANQOlCSrZ7m1+aahwcnh/dTfaJLMZfxWaJQEISBuKbiMgDC8Vr4eaeWiYASkLl0ByB96MOUz7gfjUTbhlV0ZXvZ/ucwNcK3zxTQjmoBINsAY4HwpKQLpOV2IqV1CtPg=",
    }
    res = requests.<span class="hljs-keyword">get(url, headers=headers, <span class="hljs-keyword">params=data)
    time.sleep(random.randint(<span class="hljs-number">1, <span class="hljs-number">3))
    results = json.loads(res.text)[<span class="hljs-string">"data"][<span class="hljs-string">"searchresult"]
    <span class="hljs-keyword">for con <span class="hljs-keyword">in results:
        name = con[<span class="hljs-string">"name"]              <span class="hljs-meta"># 酒店名称
        addr = con[<span class="hljs-string">"addr"]              <span class="hljs-meta"># 酒店地址
        star = con[<span class="hljs-string">"hotelStar"]         <span class="hljs-meta"># 酒店类型
        price = con[<span class="hljs-string">"lowestPrice"]      <span class="hljs-meta"># 最低价
        scoreIntro = con[<span class="hljs-string">"scoreIntro"]  <span class="hljs-meta"># 评价
        comments = con[<span class="hljs-string">"commentsCountDesc"]  <span class="hljs-meta"># 评论数
        lng, lat = con[<span class="hljs-string">"lng"], con[<span class="hljs-string">"lat"]    <span class="hljs-meta"># 经纬度
        data = [name, addr, star, price, scoreIntro, comments, lng, lat]
        sheet.append(data)
        logging.info(data)

</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

www#gaodaima.com来源gaodaimacom搞#^代%!码&网搞代码

程序运行成功,酒店信息保存到了Excel。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python爬虫练习:爬取美团网成都地区的酒店信息

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址