【问题标题】:Scraping portions of text only after specific words in HTML file仅在 HTML 文件中的特定单词之后抓取部分文本
【发布时间】:2021-10-15 15:37:26
【问题描述】:

我对 Python 很陌生(一周大),所以如果这听起来很愚蠢,我很抱歉,但我真的很感激一些帮助。我想对 HTML 文件中的特定文本部分进行转义。例如,假设整个文本是:

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Nunc fringilla arcu congue metus aliquam mollis。 Mauris nec maximus purus。 Maecenas 坐在 amet pretium Tellus。 dignissim lacus 的 Quisque。

我想对单词“mollis”之后和单词“Quisque at dignissim lacus”之前的所有文本进行转义,理想的输出应该是:

Mauris nec maximus purus。 Maecenas 坐在 amet pretium Tellus。

到目前为止,我只是设法从网站上抓取了一些部分并删除了 HTML 标签:

from bs4 import BeautifulSoup
from re import findall

file = open('filename.html', encoding= "UTF-8")
soup = BeautifulSoup(file, 'lxml')

for match in soup.find_all('div', class_='discussion-desc'):
    recom = match.text

re.findall(r'@(\w+)','recommendations')
#['recommendations', 'steps']
#re.findall(r'@(\w+)', 'recommendations')
#[]
#(re.findall(r'@(\w+)', 'recommendations') or None,)[0]
#'recommendations'
#print (re.findall(r'@(\w+)', 'recommendations') or None,)[0]
#None

请帮忙,谢谢。

【问题讨论】:

  • 移除 HTML 标签 ? - 你这是什么意思?你有beautifulsoup 来获取标签之间的内容。
  • 我的意思是删除所有
    (我不知道那叫什么)并仅提取可读文本。

标签: python regex web-scraping beautifulsoup


【解决方案1】:

如果是单次出现,可以使用:re.search()

s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis. Mauris nec maximus purus. Maecenas sit amet pretium tellus. Quisque at dignissim lacus"

re.search(r'mollis\.(.*?)Quisque at dignissim lacus', s).group(1)

输出:

Out[28]: ' Mauris nec maximus purus. Maecenas sit amet pretium tellus. '

如果出现多次,请查看re.findall()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多