我正在尝试从汽车经销商网站上抓取一些数据。这是我目前正在尝试获取有关以下数据的随机车:https://www.bilbasen.dk/brugt/bil/audi/a4/20-tfsi-190-sport-s-tr-4d/4126406
当试图讨价还价时,我遇到了一个问题。价格包装在一个部分中,并分为class = value和class = label。我对这个价值感兴趣。
当前,我的代码如下:
url = 'https://www.bilbasen.dk/brugt/bil/audi/a4/20-tfsi-190-sport-s-tr-4d/4126406'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
import requests
from bs4 import BeautifulSoup
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
car_price = soup.find(id = "bbVipPrice")
print(car_price)
但是结果看起来像这样:
<section class="section" id="bbVipPrice">
<p id="bbVipPricePrice">
<span class="label">Pris</span>
<span class="value">409.000</span>
</p>
<p data-container="body" data-content="<p>Bilbasen kan som Danmarks førende brugtbils-site udregne markedets mest præcise gennemsnitspris. Dette gøres ved at sammenligne tilsvarende bilers årgang og pris, vægtet i forhold til kørte km.</p><p>Gennemsnittet på <b>kr. 410.000</b> er udregnet udfra 7 <b>Audi A4 2,0 TFSi 190 Sport S-tr. 2017-2019</b>, reg. <b>2018</b> heraf 6 til salg og 1 solgt de sidste tre måneder og vægtet i forhold til kørte km.</p>
<p>NB: Gennemsnitsprisen er vejledende. Forhold som stand og ekstraudstyr er ikke regnet med. Gennemsnittet er for forhandlerbiler.</p>
" data-original-title="Vægtet Gennemsnitspris" data-toggle="popover" id="bbVipPriceAverage" onclick="BilBasen.Tracking.Analytics.trackEvent('vip', 'info average price');" rel="popover">
<span class="label labelStyleSmall bb-vip-average-price-label">gns.
<span class="bb-vip-average-price">410.000</span>
<img class="bb-vip-popover-icon" src="/Public/images/ico-tooltip.png"/>
</span>
</p>
</section>
我想获取内部的值:<span class="value">409.000</span>
of 409.000。谁能帮助我调整代码?
答案 0 :(得分:1)
将最后两行更改为:
car_price = soup.find_all('span',class_='value')
print(car_price[0])
您的输出是:
<span class="value">409.000</span>
答案 1 :(得分:1)
car_price = [x.get_text() for x in soup.find_all('span', class_ = 'value')]
答案 2 :(得分:1)
您还可以从字符串中对价格进行正则表达式
import requests
import re
r = requests.get('https://www.bilbasen.dk/brugt/bil/audi/a4/20-tfsi-190-sport-s-tr-4d/4126406', headers = {'User-Agent' : 'Mozilla/5.0'})
p = re.compile(r'"listingValue":"(\d+)"')
price = p.findall(r.text)[0]
print(price)
没有捕获组:
import requests
import re
r = requests.get('https://www.bilbasen.dk/brugt/bil/audi/a4/20-tfsi-190-sport-s-tr-4d/4126406', headers = {'User-Agent' : 'Mozilla/5.0'})
p = re.compile(r'(?<="listingValue":")(?:\d+)')
print(p.findall(r.text))
答案 3 :(得分:1)
您尝试提取的目标上存在的直接元素。您可以使用类似以下的内容
car_price_chunk = soup.find('p',{'id':'bbVipPricePrice'})
完整的代码如下,
url = 'https://www.bilbasen.dk/brugt/bil/audi/a4/20-tfsi-190-sport-s-tr-4d/4126406'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
import requests
from bs4 import BeautifulSoup
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
car_price_chunk = soup.find('p',{'id':'bbVipPricePrice'})
if car_price_chunk:
car_price = car_price_chunk.text.replace('Pris','').strip()
print(car_price)
说明
希望您需要以下块中的内容,并且如果您选中
标记上存在且其标识符为 bbVipPricePrice 的目标元素。为此,您可以使用选择或查找方法。
<p id="bbVipPricePrice">
<span class="label">Pris</span>
<span class="value">409.000</span>
</p>
结果为您 409.000