如何在多个 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"
大家好,我正在尝试从网站中提取某些文本信息,并非所有文本都是必需的,但当文本位于多个 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"