webscraping: извлечение URL из xpath в html с использованием python: списки airbnb - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь извлечь URL для списков со страницы города в AirBnb, используя библиотеки Python 3. Я знаком с тем, как очищать более простые веб-сайты с помощью Beautifulsoup и запрашивать библиотеки.

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

элемент в 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 для ссылки на страницу. Есть идеи?

1 Ответ

0 голосов
/ 31 августа 2018

Чтобы извлечь ссылки, сначала вы должны убедиться, что ссылки на ссылки существуют в источнике страницы. Для этого вы можете выполнить поиск по любому из идентификаторов листинга в источнике страницы (Ctrl + U, если вы используете Google Chrome, Mozilla Firefox). Если URL-адреса существуют в исходном коде страницы, вы можете напрямую очистить их, используя xpath в тексте ответа на странице листинга. На приведенной выше странице со списком Airbnb нет ссылок в источнике страницы, поэтому страница может отправлять запросы на некоторые другие страницы (обычно запросы json). Вы можете узнать эти запросы и отправить запросы на эти страницы и получить необходимые данные. Пожалуйста, прокомментируйте, если у вас есть какие-либо сомнения относительно этого.

...