【发布时间】:2021-03-08 17:02:51
【问题描述】:
我发现了类似的问题,但没有一个可以直接解决我的问题。我已经为此工作了大约一个星期,但没有运气。
我正在尝试从此链接中抓取数据:https://www.truecar.com/prices-new/chevrolet/malibu-pricing/?zipcode=44070
问题是,我要查找的值没有 span-class 属性,但是当使用 div 类属性时,它与页面上的其他值具有相同的名称。我希望我的代码返回 $22,807,但我尝试的任何操作都返回 $25,195 或 []。请参阅以下 HTML:
<div class="text-right col-3 col-sm-4 col-md-6">
<div class="label-block label-block-1 label-block-sm-2 text-muted" data-qa="vehicle-header-msrp"
data-test="vehicleHeaderMsrp">
<div class="label-block-title" data-qa="LabelBlock-title" data-test="labelBlockTitle"></div>
<div class="label-block-subtitle" data-qa="LabelBlock-subTitle" data-test="labelBlockSubTitle"></div>
<div data-qa="LabelBlock-text" class="label-block-text" data-test="labelBlockText">
<span class="pricing-block-amount-strikethrough">$25,195</span>
</div>
</div>
</div>
<div class="text-right col-3 col-sm-4 col-md-6">
<div class="label-block label-block-1 label-block-sm-2" data-qa="vehicle-header-average-market-price"
data-test="vehicleHeaderAverageMarketPrice">
<div class="label-block-title" data-qa="LabelBlock-title" data-test="labelBlockTitle"></div>
<div class="label-block-subtitle" data-qa="LabelBlock-subTitle" data-test="labelBlockSubTitle"></div>
<div data-qa="LabelBlock-text" class="label-block-text" data-test="labelBlockText">
<span class="">$22,807</span>
</div>
</div>
</div>
我可以通过以下代码轻松获得返回的 25,195 美元:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:70.0) Gecko/20190101 Firefox/70.0"
}
url = "https://www.truecar.com/prices-new/chevrolet/malibu-pricing/?zipcode=44070"
print(url)
page = requests.get(
url,
headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
test = soup.find('span', {'class': 'pricing-block-amount-strikethrough'})
print(test.get_text())
但我尝试的调用组合都不会返回我需要的 $22,807。
有趣的是,如果我使用,我可以得到 25 美元的价值
test = soup.find('div', {'class': 'label-block label-block-1 label-block-sm-2 text-muted'})
所以我假设我可以简单地删除“文本静音”部分,例如:
test = soup.find('div', {'class': 'label-block label-block-1 label-block-sm-2'})
获取 22 美元的数字,但它只返回 [ ]。
免责声明:我需要的美元金额经常变化,所以如果你帮助解决这个问题并最终得到一个与 22,807 美元略有不同的数字,它可能仍然是正确的。如果您单击该链接,我要查找的数字是“市场平均值”而不是“厂商建议零售价”。
谢谢!
【问题讨论】:
-
从这里动态获取:truecar.com/abp/api/pricing/…从请求中获取json .json() 然后json['average_price']
标签: python html web-scraping beautifulsoup