gpt4 book ai didi

python - BeautifulSoup - lxml 和 html5lib 解析器抓取差异

转载 作者:太空狗 更新时间:2023-10-30 00:17:28 24 4
gpt4 key购买 nike

我正在使用 BeautifulSoup 4Python 2.7。我想从网站中提取某些元素(数量,请参见下面的示例)。出于某种原因,lxml 解析器不允许我从页面中提取所有需要的元素。它只会打印前三个元素。我正在尝试使用 html5lib 解析器来查看是否可以提取所有这些内容。

该页面包含多个项目及其价格和数量。包含每个项目所需信息的部分代码如下所示:

<td class="size-price last first" colspan="4">
<span>453 grams </span>
<span> <span class="strike">$619.06</span> <span class="price">$523.91</span>
</span>
</td>

让我们考虑以下三种情况:

案例 1 - 数据:

#! /usr/bin/python
from bs4 import BeautifulSoup
data = """
<td class="size-price last first" colspan="4">
<span>453 grams </span>
<span> <span class="strike">$619.06</span> <span class="price">$523.91</span>
</span>
</td>"""
soup = BeautifulSoup(data)
print soup.td.span.text

打印:

453 grams 

案例 2 - LXML:

#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('The URL goes here')
soup=BeautifulSoup(webpage, "lxml")
print soup.find('td', {'class': 'size-price'}).span.text

打印:

453 grams

案例 3 - HTML5LIB:

#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('The URL goes here')
soup=BeautifulSoup(webpage, "html5lib")
print soup.find('td', {'class': 'size-price'}).span.text

我收到以下错误:

Traceback (most recent call last):
File "C:\Users\Dom\Python-Code\src\Testing-Code.py", line 6, in <module>
print soup.find('td', {'class': 'size-price'}).span.text
AttributeError: 'NoneType' object has no attribute 'span'

我必须如何调整我的代码才能使用 html5lib 解析器提取我想要的信息?如果我在使用 html5lib 后在控制台中简单地打印汤,我可以看到所有需要的信息,所以我认为它可以让我得到我想要的。 lxml 解析器不是这种情况,所以我也很好奇 lxml 解析器似乎没有使用 lxml 解析器提取所有数量,如果我使用:

print [td.span.text for td in soup.find_all('td', {'class': 'size-price'})]

最佳答案

from lxml import etree

html = 'your html'
tree = etree.HTML(html)
tds = tree.xpath('.//td[@class="size-price last first"]')
for td in tds:
price = td.xpath('.//span[@class="price"]')[0].text
strike = td.xpath('.//span[@class="strike"]')[0].text
spans = td.xpath('.//span')
quantity = [i.text for i in spans if 'grams' in i.text][0].strip(' ')

关于python - BeautifulSoup - lxml 和 html5lib 解析器抓取差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com