【问题标题】:Parsing HTML text that isn't labeled解析未标记的 HTML 文本
【发布时间】:2016-01-12 08:08:18
【问题描述】:

我正在从网站的 html 制作电子表格。我无法弄清楚如何提取未标记数据的信息。例如,我可以编写一个程序来搜索 <span class="city-names"> 中的文本,以找到大学所在的城市,但要找到大学的名称 St。圣彼得堡国立大学,没有这样的标签。有没有办法让我使用 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>

【问题讨论】:

  • 你能假设大学总是在第二个换行符之后&lt;br&gt; 吗?

标签: python html beautifulsoup html-parsing


【解决方案1】:

这有点粗,这是你打算做的吗?

试试这是否适用于整个页面。

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

【讨论】:

    【解决方案2】:

    如果你知道它总是出现在特定位置,你可以使用 find_all 函数。对于您提供的示例,

     span = soup.div.find_all('span')[2]
    

    将 span 标签指向大学名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 2016-01-09
      • 2014-11-03
      • 2012-05-26
      • 2020-07-16
      • 1970-01-01
      相关资源
      最近更新 更多