我正在尝试使用python 3库从AirBnb中的城市页面中提取列表的URL。我熟悉如何使用Beautifulsoup刮取更简单的网站并请求库。
网址:'https://www.airbnb.com/s/Denver--CO--United-States/homes'
如果我检查页面上链接的元素(在Chrome中),我会得到:
xpath: "//*[@id="listing-9770909"]/div[2]/a"
selector: "listing-9770909 > div._v72lrv > a"
我的尝试:
import requests
from bs4 import BeautifulSoup
url = 'https://www.airbnb.com/s/Denver--CO--United-States/homes'
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
divs = soup.find_all('div', attrs={'id': 'listing'})
尝试2:
import requests
from lxml import html
page = requests.get(url)
root = html.fromstring(page.content)
tree = root.getroottree()
result = root.xpath('//div[@id="listing-9770909"]/div[2]/a')
for r in result:
print(r)
这些都不会返回任何东西。我需要提取的是页面链接的URL。有任何想法吗?
要提取链接,首先必须确保页面源中存在链接的URL。为此,您可以使用页面源中的任何列表ID进行搜索(如果您使用的是谷歌浏览器,则可以使用ctrl + u,mozilla firefox)。如果页面源中存在URL,则可以使用列表页面的响应文本中的xpath直接抓取它们。这里Airbnb的上面列表页面没有页面源中的链接,因此页面可能正在向其他一些页面发送请求(通常是json请求)。您可以找到这些请求并向这些页面发送请求并获取所需数据。如果您对此有任何疑问,请发表评论。