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')
但我也从显示的值中得到不同的值。
答案 0 :(得分:0)
在源代码中,空格可能使用Unicode char 00A0(不可破坏空间)进行编码。根据您用来阅读源代码的浏览器,您可能会看到一个简单的空格字符(edge,firefox)或等效的HTML
(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:显然,返回的页面具有不同的内容,具体取决于用于执行请求的用户代理...
让我们试试假冒谷歌Chrome用户代理:
from fake_useragent import UserAgent
# [...]
page_accueil = requests.get(URL_accueil, headers={'User-Agent': str(UserAgent().chrome)})
结果:
134 500 km