BeautifulSoup не видит элемент, даже если он присутствует на странице - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь очистить списки с Airbnb. Каждый список имеет свой собственный идентификатор. Тем не менее, следующий код выглядит так: None:

import requests, bs4

response = requests.get('https://www.airbnb.pl/s/Girona--Hiszpania/homes?refinement_paths%5B%5D=%2Fhomes&query=Girona%2C%20Hiszpania&checkin=2018-07-04&checkout=2018-07-25&allow_override%5B%5D=&ne_lat=42.40450221314142&ne_lng=3.3245690859736214&sw_lat=41.97668610374056&sw_lng=1.7960961855829964&zoom=10&search_by_map=true&s_tag=nrGiXgWC')  
soup = bs4.BeautifulSoup(response.text, "html.parser")

element = soup.find(id="listing-18354577")
print(element)

Почему суп не видит этот элемент, даже если он уже загружен на страницу?

Это в контейнере какого-то типа, который мне нужен по-другому?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

requests не ждите js, вы можете использовать селен , чтобы загрузить всю страницу, и после этого используйте bs4, например, это работает:

import requests, bs4
from selenium import webdriver

# put the path to chromedriver
driver = webdriver.Chrome('path/to/chromedriver') 
website = "https://www.airbnb.pl/s/Girona--Hiszpania/homes?refinement_paths%5B%5D=%2Fhomes&query=Girona%2C%20Hiszpania&checkin=2018-07-04&checkout=2018-07-25&allow_override%5B%5D=&ne_lat=42.40450221314142&ne_lng=3.3245690859736214&sw_lat=41.97668610374056&sw_lng=1.7960961855829964&zoom=10&search_by_map=true&s_tag=nrGiXgWC"
driver.get(website) 
html = driver.page_source
soup = bs4.BeautifulSoup(html, "html.parser")

element = soup.find(id="listing-18354577")
print(element)

выход

<div class="_1wq3lj" id="listing-18354577"> ...  #and many other data
0 голосов
/ 30 июня 2018

Элемент с идентификатором listing-18354577 создается с помощью javascript после загрузки исходной HTML-страницы в ваш браузер. Requests - это всего лишь HTTP-клиент, а не полноценный движок браузера, поэтому он не выполняет Javascript, который заканчивает тем, что извлекает этот элемент. Ответ от Requests - это просто исходный HTML-код страницы (который не включает listing-18354577).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...