我正在学习如何在Airbnb(here's the page)上进行尝试。当我使用谷歌浏览器检查其中一个家庭图像时,我看到:
我无法让我的脚本返回代表图片内容的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。 (不能将我从此处获得的链接发布为不足的代表)。
答案 0 :(得分:3)
这是因为request
没有运行Javascript代码。因此,您无法找到rooms/
。你可以使用Selenium或Splash。
如果您打开页面来源并尝试查找rooms/
,您将找不到任何结果。
答案 1 :(得分:2)
这是因为内容仅在初始请求完成后通过javascript加载到您的浏览器窗口中。基本上,这是因为Airbnb填充其网页的DOM的方式。
为了能够抓取这些页面,我担心你需要更多高级技巧而不是简单的请求。
如果您是初学者,请提供两个提示: