正在解析 HTML 个未标记的文本
Parsing HTML text that isn't labeled
我正在根据网站的 html 制作电子表格。我无法弄清楚如何提取未标记数据的信息。例如,我可以编写一个程序来搜索 <span class="city-names">
中的文本以查找大学所在的城市,但大学名称 St. Petersburg State University, 没有这样的标签。有没有办法让我使用 Python 和 BeautifulSoup 将其标识为大学(比如通过标识它是未标记文本的第二个实例)?
谢谢!
<div class="result" style="width:100%;">
<span class="uppercase bold country-name" style="width:100%;">
Russia
<span class="city-names">
St. Petersburg
</span>
</span>
<br/>
<span class="bold">
<a href="http://eap.ucop.edu/OurPrograms/russia/Pages/russian_area_studies_st_petersburg.aspx" target="_blank">
Russian Area Studies, St. Petersburg - Fall
</a>
</span>
<br/>Council on International Educational Exchange, St. Petersburg
<br/>St. Petersburg State University
</div>
如果您知道它总是出现在特定位置,您可以使用 find_all 函数。对于您提供的示例,
span = soup.div.find_all('span')[2]
将用大学名称指向 span 标签。
这有点粗糙,这是你打算做的吗?
试试这是否适用于整个页面。
from bs4 import BeautifulSoup
html = """
<div class="result" style="width:100%;">
<span class="uppercase bold country-name" style="width:100%;">
Russia
<span class="city-names">
St. Petersburg
</span>
</span>
<br/>
<span class="bold">
<a href="http://eap.ucop.edu/OurPrograms/russia/Pages/russian_area_studies_st_petersburg.aspx" target="_blank">
Russian Area Studies, St. Petersburg - Fall
</a>
</span>
<br/>Council on International Educational Exchange, St. Petersburg
<br/>St. Petersburg State University
</div>
"""
soup = BeautifulSoup(html, "html.parser")
cities = soup.find_all('div', attrs={'class': 'result'})
for city in cities:
spans = city.find_all('span')
for span in spans:
span.decompose()
text_you_need = BeautifulSoup(str(city),"html.parser").find('div').text
university = text_you_need.strip().split('\n')[1].strip()
print(university)
我从 div 中删除了 span 标签的内容并获取了第二行文本并执行了 strip()。
输出:
St. Petersburg State University
我正在根据网站的 html 制作电子表格。我无法弄清楚如何提取未标记数据的信息。例如,我可以编写一个程序来搜索 <span class="city-names">
中的文本以查找大学所在的城市,但大学名称 St. Petersburg State University, 没有这样的标签。有没有办法让我使用 Python 和 BeautifulSoup 将其标识为大学(比如通过标识它是未标记文本的第二个实例)?
谢谢!
<div class="result" style="width:100%;">
<span class="uppercase bold country-name" style="width:100%;">
Russia
<span class="city-names">
St. Petersburg
</span>
</span>
<br/>
<span class="bold">
<a href="http://eap.ucop.edu/OurPrograms/russia/Pages/russian_area_studies_st_petersburg.aspx" target="_blank">
Russian Area Studies, St. Petersburg - Fall
</a>
</span>
<br/>Council on International Educational Exchange, St. Petersburg
<br/>St. Petersburg State University
</div>
如果您知道它总是出现在特定位置,您可以使用 find_all 函数。对于您提供的示例,
span = soup.div.find_all('span')[2]
将用大学名称指向 span 标签。
这有点粗糙,这是你打算做的吗?
试试这是否适用于整个页面。
from bs4 import BeautifulSoup
html = """
<div class="result" style="width:100%;">
<span class="uppercase bold country-name" style="width:100%;">
Russia
<span class="city-names">
St. Petersburg
</span>
</span>
<br/>
<span class="bold">
<a href="http://eap.ucop.edu/OurPrograms/russia/Pages/russian_area_studies_st_petersburg.aspx" target="_blank">
Russian Area Studies, St. Petersburg - Fall
</a>
</span>
<br/>Council on International Educational Exchange, St. Petersburg
<br/>St. Petersburg State University
</div>
"""
soup = BeautifulSoup(html, "html.parser")
cities = soup.find_all('div', attrs={'class': 'result'})
for city in cities:
spans = city.find_all('span')
for span in spans:
span.decompose()
text_you_need = BeautifulSoup(str(city),"html.parser").find('div').text
university = text_you_need.strip().split('\n')[1].strip()
print(university)
我从 div 中删除了 span 标签的内容并获取了第二行文本并执行了 strip()。
输出:
St. Petersburg State University