【问题标题】:Python BeautifulSoup find_all - how to search the html for a string, ignoring all spaces and non breaking spaces in the html?Python BeautifulSoup find_all - 如何在 html 中搜索字符串,忽略 html 中的所有空格和不间断空格?
【发布时间】:2021-04-25 08:02:48
【问题描述】:

我正在使用 Python BeautifulSoup 从 10K 文件中提取风险因素部分(因此我需要找到该部分的开始和结束位置)。例如:

https://www.sec.gov/Archives/edgar/data/1321502/000143774910004615/andain_10k-123106.htm

要获取这个元素:

项目 1A。风险因素

我想改编这样的东西:

my_text = soup.find_all(string=["ITEM1A.RISKFACTORS", "RISKFACTORS"])

为了捕捉任何内容,一旦去掉前后的所有空格(也可能是单词之间的空格)、不间断空格和任何其他妨碍格式,完全正确匹配我的一个字符串(“ITEM1A.RISKFACTORS”、“RISKFACTORS”)。

我想要: "Item 1A. Risk Factors" "Risk Factors" " Risk Factors" "Risk Factors" "Item 1A.\xa0Risk Factors"

我不想要: "We have a number of Risk Factors."

理想情况下,我想避免使用正则表达式,如果有某种“stripped=True”参数我可以与 find_all 一起使用会更好,但如果需要正则表达式,请帮我写!谢谢

【问题讨论】:

  • 欢迎来到 SO。帮助我们帮助您 - 请改进您的问题,以便我们可以重现您的问题。 How to create a Minimal, Reproducible Example 谢谢一些书面代码,网址,...会很酷。
  • 谢谢!我已经编辑了我的帖子。

标签: python html web-scraping beautifulsoup


【解决方案1】:

在我看来,最简单的方法是使用 REGex。 您可以删除单词之间的空格,例如this:

>>> import re
>>> re.sub(' +', ' ', 'The     quick brown    fox')
'The quick brown fox'

要修复编码,您可以尝试this

r = urllib.urlopen('http://www.elnorte.ec/')
x = BeautifulSoup.BeautifulSoup(r.read)
r.close()

print(x.prettify('latin-1'))

要搜索这些字符串,我还建议使用正则表达式,这看起来与 lines 类似

print(soup(text=re.compile('exact text')))

如果你搜索它,不仅会找到"exact text",还会找到"almost exact text"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2022-01-01
    • 1970-01-01
    • 2015-12-17
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多