значение, возвращаемое Beautifulsoup отличается от значения в HTML - PullRequest
0 голосов
/ 15 мая 2018

Значение, возвращаемое BeautifulSoup, отличается от значения, отображаемого в коде HTML:

<div class="fieldYear">2013</div>
<div class="fieldMileage">132 000 km</div>

Если я применю Beautifulsoup, как это:

from bs4 import BeautifulSoup
import requests

URL_accueil = "https://www.lacentrale.fr/listing?mileageMax=150000&priceMax=17000&priceMin=5000&yearMin=2012&age=1"
page_accueil = requests.get(URL_accueil)
soup = BeautifulSoup(page_accueil.content, "lxml").find('div', {"class": "resultListContainer"})
print(soup)

Я получу:

2012 146A 520A км

Почему BeautifulSoup возвращает неправильные значения? У меня нет 2013 года и 132000 км.

Я пытался добавить

soup = BeautifulSoup(page_accueil.content, "lxml", from_encoding='utf-8') 

но я также получаю разные значения из отображаемых значений.

1 Ответ

0 голосов
/ 15 мая 2018

В исходном коде пробелы, вероятно, закодированы с помощью Unicode char 00A0 (неразрывный пробел).В зависимости от браузера, который вы используете для чтения исходного кода, вы можете увидеть простой пробел (edge, firefox) или HTML-эквивалент &nbsp; (chrome, opera).Это только хитрость, используемая некоторым браузером, чтобы помочь вам «визуализировать» определенный код символа для пробела.

Редактировать: Чтобы исправить проблему, просто инициализируйте ваш объект BeautifulSoup с помощью page_accueil.textвместо page_accueil.content

from bs4 import BeautifulSoup
import requests

URL_accueil = "https://www.lacentrale.fr/listing?mileageMax=150000&priceMax=17000&priceMin=5000&yearMin=2012&age=1"
page_accueil = requests.get(URL_accueil)
soup = BeautifulSoup(page_accueil.text, "lxml")
result = soup.find('div', {"class": "fieldMileage"})

print(result.text)

возвращает

147 840 km

Edit2: Очевидно, что возвращаемая страница имеет различное содержимое в зависимости от агента пользователя, используемого для выполнения запроса...

Давайте попробуем с поддельным пользовательским агентом Google Chrome:

from fake_useragent import UserAgent
# [...]
page_accueil = requests.get(URL_accueil, headers={'User-Agent': str(UserAgent().chrome)})

результат:

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