提取没有span类属性和相同div类属性的html



我发现了类似的问题,但没有一个直接解决我的问题。我已经为这个工作了大约一个星期了,没有运气。

我正在尝试从这个链接中抓取数据:https://www.truecar.com/prices-new/chevrolet/malibu-pricing/?zipcode=44070

问题是,我正在寻找的值没有跨类属性,但当使用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'})

所以我认为我可以简单地删除"text-muted"像部分:

test = soup.find('div', {'class': 'label-block label-block-1 label-block-sm-2'})

获取$22的数字但是它只返回[]

免责声明:我需要的美元金额经常变化,所以如果你帮助解决这个问题,最终得到的数字与22,807美元略有不同,它可能仍然是正确的。如果你点击链接,我要找的数字是"市场平均指数"。而不是"MSRP">

谢谢!

如果您浏览页面,它需要时间才能获得您正在寻找的第二个值。在请求模块中,它快速获取内容,而不是等待它完全加载。这是在bs4中添加硒的地方。添加等待站点加载然后获取页面内容。

你可以从链接

下载geckodriver
import time
from bs4 import BeautifulSoup
from selenium import webdriver
url = "https://www.truecar.com/prices-new/chevrolet/malibu-pricing/?zipcode=44070"
driver = webdriver.Firefox(executable_path=r'geckodriver.exe')
driver.get(url)
time.sleep(7)
soup = BeautifulSoup(driver.page_source, 'html')
div = soup.find_all('div', {'class': 'label-block-text'})
for x in div:
span = x.find('span')
print(span.get_text())

最新更新