beautifulsoup返回的值与htm中的值不同

2024-10-02 02:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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 146 520 公里

为什么BeautifulSoup返回错误的值?我没有2013年和132000公里

我试图补充

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

但是我也从显示的值中得到不同的值


Tags: 代码fromimportdivurlhtmlpagecontent
1条回答
网友
1楼 · 发布于 2024-10-02 02:27:50

在源代码中,空格可能是用Unicode字符00A0(不可破空格)编码的。根据您用来阅读源代码的浏览器的不同,您可能会看到一个简单的空格字符(edge、firefox)或一个HTML等价的&nbsp;(chrome、opera)。这只是一些浏览器用来帮助您“可视化”空间的特定字符代码的技巧

编辑:要解决这个问题,只需用page_accueil.text而不是page_accueil.content初始化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.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

相关问题 更多 >

    热门问题