无法从Airbnb

时间:2017-09-06 19:19:26

标签: python python-2.7 web-scraping urllib2

我正在学习如何在Airbnb(here's the page)上进行尝试。当我使用谷歌浏览器检查其中一个家庭图像时,我看到: enter image description here

我无法让我的脚本返回代表图片内容的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(即HTML中的rooms/ isn&#t ;.

然后一些研究提出了关于标题的想法,以便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)。

编辑---解决方案 理解这个问题后,我能够按照建议使用Selenium:

from selenium import webdriver
import time

url = "https://www.airbnb.co.uk/s/Rome/homes?checkin=2017-11-12&checkout=2017-11-19"
path_to_chromedriver = 'C:/users/j.haberfield/Desktop/chromedriver'
driver = webdriver.Chrome(executable_path = path_to_chromedriver)
driver.get(url)
time.sleep(5)

htmlSource = driver.page_source

这需要安装chromedriver。 (不能将我从此处获得的链接发布为不足的代表)。

2 个答案:

答案 0 :(得分:3)

这是因为request没有运行Javascript代码。因此,您无法找到rooms/。你可以使用Selenium或Splash。

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

答案 1 :(得分:2)

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

为了能够抓取这些页面,我担心你需要更多高级技巧而不是简单的请求。

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

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