我正在尝试学习如何从网页中提取一些数据。我使用以下代码:
import requests
from lxml import html
url = 'https://www.otomoto.pl/oferta/mercedes-benz-klasa-s-s500-long-4matik-amg-ID6yEJqd.html#003d4d5f4e'
page = requests.get(url)
tree = html.fromstring(page.content)
data1 = tree.xpath('//div[@class="offer-params__value"]/text()')
headers= tree.xpath('//span[@class="offer-params__label"]/text()')
data2 = tree.xpath('//a[@class="offer-params__link"]/text()')
有关汽车详情的网页的一部分(在图片下方),有许多细分li
有汽车信息:
<li class="offer-params__item">
<span class="offer-params__label">Rok produkcji</span>
<div class="offer-params__value"> 1985 </div>
</li>
https://www.otomoto.pl/oferta/mercedes-benz-w201-190-190-d-ID6yLUAR.html#xtor=SEC-8
有没有办法只提取一个与“Rok produkcji”标签严格关联的值(在本例中是1985年),两者都只在一个<li>
内?使用我的代码我提取所有汽车详细信息的列表,我看不到直接关联,例如采取每一秒项目或类似,以确保我总是得到这个确切的事情(在这种情况下,它是制造日期)。如果此列表长度始终相同,则会没有问题,但它会发生变化。数据列表是分开的,如果它们是文本或链接则依赖。
答案 0 :(得分:0)
我发现使用BeautifulSoup 4或bs4
:
import bs4
import requests
url = 'https://www.otomoto.pl/oferta/mercedes-benz-w201-190-190-d-ID6yLUAR.html'
res = requests.get(url)
soup = bs4.BeautifulSoup(res.text)
# search by tag and text/content and find the next sibling
found = soup.find('span', text='Rok produkcji').find_next_sibling('div')
# get the div's content
print(found.contents[0].strip())
答案 1 :(得分:0)
这是一个纯lxml
和Xpath解决方案:
import requests
from lxml import html
url = 'https://www.otomoto.pl/oferta/mercedes-benz-w201-190-2-0-d-automat-oryginalny-przebieg-dealer-ID6yEHUr.html#f5942353bf'
page = requests.get(url)
tree = html.fromstring(page.content)
data = tree.xpath("//span[text() = 'Rok produkcji']/following-sibling::div/text()")[0].strip()
print(data)