如何在多个 div 类 python 中查找一行文本

How to find a line of text inside multiple div classes python

大家好,我正在尝试从网站中提取某些文本信息,并非所有文本都是必需的,但当文本位于多个 div 中时,我对如何操作感到困惑。 这是我正在查看的代码。但是当里面有多行时我会感到困惑。我需要提取“数字”标题和文本(即 837270),以及“位置”标题和文本(俄亥俄州)

                   <br>
                <br>
              </p>
            </div>
          </div>
          <div class="row">
            <div class="col-md-4">
                <p>
                  <span class="text-muted">Number</span>
                  <br>
                  "837270"
                </p>
            </div>
            <div class="col-md-4">
              <p>
                <span class="text-muted">Location</span>
                <br>
                "Ohio"
              </p>
            </div>
              <div class="col-md-4">
                <p>
                  <span class="text-muted">Office</span>
                <be>
                   "Joanna" 
                </p>
              </div>
          </div>
          <div class="row">
            <div class="col-md-4">
              <p>
                <span class="text-muted">Date</span>
              <be>
                "07/01/2022"
              </p>
            </div>
            <div class="col-md-4">
                <p>
                  <span class="text-muted">Type</span>
                <br>
                  "Business"
                </p>
            </div>
            <div class="col-md-4">
                <p>
                  <span class="text-muted">Status</span>
                  <br>
                  "Open"
                </p>
            </div>
          </div>
        </div>
      </div>

    </div>

我已经试过了,它打印出 none。

soup = BeautifulSoup(driver.page_source,'html.parser')  
df = soup.find('div', id = "Location")
print(df.string)

我要拉着存着。如有任何帮助,我们将不胜感激。

有时 HTML 没有 ID 或其他可以轻松遵循的模式。不过,您可以用它变得非常聪明,您不必依赖使用 table 结构的 HTML 页面。

例如,在这种情况下,似乎每个部分都以 <span class="text-muted"> 标记为标题,其值是该 span 标记的最后一个兄弟。

要抓取每个标题及其值,我们可以这样做:

import bs4
from bs4 import BeautifulSoup
soup = BeautifulSoup(..., 'lxml')

for title_tag in soup.find_all('span', class_='text-muted'):

    # get the last sibling
    *_, value_tag = title_tag.next_siblings

    title = title_tag.text.strip()

    if isinstance(value_tag, bs4.element.Tag):
        value = value_tag.text.strip()
    else:  # it's a navigable string element
        value = value_tag.strip()

    print(title, value)

输出:

Number "837270"
Location "Ohio"
Office "Joanna"
Date "07/01/2022"
Type "Business"
Status "Open"

当然,您可以在此处识别其他模式以可靠地获取值。这只是一个例子。

如果您只想获取 Location,可以通过其文本找到它。

location_tag = soup.find('span', class_='text-muted', text='Location')

然后获取它的值和上面一样

*_, location_value_element = location_tag.next_siblings
print(location_value_element.strip()) # "Ohio"