【问题标题】:webscraping: extracting url from xpath in html using python: airbnb listings网页抓取:使用 python 从 html 中的 xpath 中提取 url:airbnb 列表
【发布时间】:2019-02-05 16:58:39
【问题描述】:

我正在尝试使用 python 3 库从 AirBnb 的城市页面中提取列表的 URL。我熟悉如何使用 Beautifulsoup 和 requests 库抓取更简单的网站。

网址:'https://www.airbnb.com/s/Denver--CO--United-States/homes'

element in the html

如果我检查页面上的链接元素(在 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。有什么想法吗?

【问题讨论】:

  • 检查 DOM 是不够的,您需要查看源代码并在页面加载时验证它是否存在。因为这些库都没有 javascript 引擎。

标签: python xpath web-scraping beautifulsoup lxml


【解决方案1】:

要提取链接,首先您必须确保链接的 url 存在于页面源中。为此,您可以使用页面源中的任何列表 ID 进行搜索(如果您使用的是 google chrome、mozilla firefox,请按 ctrl+u)。如果页面源中存在 url,您可以在列表页面的响应文本中使用 xpath 直接抓取它们。此处Airbnb的上述列表页面没有页面源中的链接,因此该页面可能正在向其他页面发送请求(通常是json请求)。您可以找出这些请求并将请求发送到这些页面并获取所需的数据。 如果您对此有任何疑问,请发表评论。

【讨论】:

  • 谢谢!我现在可以在 Chrome 中看到源代码(这是我已经能够使用 requests.get() 和汤提取的内容),并且确实不存在列表 ID。我想我需要按照你接下来说的去做:找到这些 json 请求(在那个 块中的某个地方?)并提出请求。你能解释一下那一步吗?
  • 我应该提到我找到了一个 xpath 字符串,它可用于返回页面上所有链接的类句柄(也就是说,它可以在页面上 Chrome 开发人员工具上的 javascript 终端中工作):' //*[包含(@href,“房间”)]'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2016-10-19
  • 1970-01-01
相关资源
最近更新 更多