我正在研究简单的网页抓取工具,我试图在Google预览页上查找产品尺寸。我正在使用图书馆“美丽”的汤和re”来检索信息。 如果我查找一项并转到源页面,则可以确定描述所属的类,并且可以简单地使用:
soup.find(class_="st") and get results like this:
部件号, DCD771B 。产品重量,2.8磅。包尺寸,10.8 x
8.2 x 3.5英寸项目型号, DCD771B 。电源,电池供电。
尽管如果维度始终在同一类中,这可以很好地工作,但是如果维度并非始终在该类中,则我无法找到检索此信息的方法。所以我的想法是尝试检索Dimensions所属的类,然后使用上面的相同代码。 我已经试过这段代码: soup.find_all(text =“ Dimensions”) 它返回包含3个元素的列表,表示找到3个包含单词“ Dimensions”的类。 如何检索单词维度所属的类名称? 这是HTML的一部分,我会尝试使用单词“ Dimensions”从中检索类名称
html = """<span class="st">
Part Number,
<b>
DCD771B
</b>
. Item Weight, 2.8 pounds. Package
<b>
Dimensions
</b>
, 10.8 x
<br/>
8.2 x 3.5 inches. Item model number,
<b>
DCD771B
</b>
. Power Source, battery-powered.
</span> """
答案 0 :(得分:1)
您可能需要做更多的工作才能解决问题。可以这么说,这可能无法涵盖所有基础。但是,这应该可以帮助您。
从本质上讲,您将只是获取父标记,然后在通过“ Dimensions”迭代找到的3个元素时使用.attrs
。您可以通过下面的代码来了解它的工作原理。
import bs4
import re
html = """<span class="st">
Part Number,
<b>
DCD771B
</b>
. Item Weight, 2.8 pounds. Package
<b>
Dimensions
</b>
, 10.8 x
<br/>
8.2 x 3.5 inches. Item model number,
<b>
DCD771B
</b>
. Power Source, battery-powered.
</span> """
soup = bs4.BeautifulSoup(html, 'html.parser')
tag_name = soup.find(text=re.compile('Dimensions')).parent.parent.name
attributes = soup.find(text=re.compile('Dimensions')).parent.parent.attrs
class_name = soup.find(text=re.compile('Dimensions')).parent.parent.attrs['class'][0]
输出:
print (tag_name)
span
print(attributes)
{'class': ['st']}
print(class_name)
st