【问题标题】:Can't scrape all HTML from Airbnb无法从 Airbnb 抓取所有 HTML
【发布时间】:2017-09-06 19:19:25
【问题描述】:

我正在学习爬虫,并正在 Airbnb (here's the page) 上尝试。当我使用 Google Chrome 检查其中一张家庭图片时,我看到了:

我无法让我的脚本返回代表图中内容的 HTML(例如列表的链接)。初步尝试:

import requests    

url = "https://www.airbnb.co.uk/s/Rome/homes?checkin=2017-11-12&checkout=2017-11-19"
landing = requests.get(url)

print landing.content.find("rooms/")

这只是返回一个-1(即rooms/不在HTML中)。

然后一些研究提出了关于“标题”的想法,因此 Airbnb 不知道我是一个脚本(代码是复制/粘贴的,因为我真的不明白这些标题的作用)。其他人建议使用 urllib 代替。所以最近的尝试是:

from urllib2 import Request,urlopen

user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
headers = { 'User-Agent' : user_agent }

url = "https://www.airbnb.co.uk/s/Rome/homes?checkin=2017-11-12&checkout=2017-11-19"

req = Request(url,None,headers)
landing = urlopen(req)
print landing.read().find('rooms/')

这也返回一个 -1。

非常感谢任何想法。我正在使用 Python 2.7 (Windows)。

【问题讨论】:

    标签: python python-2.7 web-scraping urllib2


    【解决方案1】:

    这是因为 request 不运行 Javascript 代码。结果你找不到rooms/。你可以使用 Selenium 或 Splash。

    如果您打开页面源并尝试查找rooms/,您也将找不到任何结果。

    【讨论】:

    • 你应该使用 Selenium 或 Splash 来处理它
    【解决方案2】:

    发生这种情况是因为内容仅在初始请求完成后通过 javascript 加载到您的浏览器窗口中。基本上,这是因为 Airbnb 填充其页面 DOM 的方式。

    为了能够抓取这样的页面,恐怕你需要比简单请求更高级的技巧。

    两个提示,如果您是初学者:

    • 从简单的网站开始测试,也许是最好的静态网站,如果你能找到任何有趣的网站
    • 不要选择 Python 2。Python 3 已经推出很长时间了,所以最好立即开始使用。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多