如何找到文本所属的类?

时间:2019-01-19 08:42:05

标签: python beautifulsoup

我正在研究简单的网页抓取工具,我试图在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> """

1 个答案:

答案 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