beautifulsoup解析html文件内容

时间:2017-05-28 02:43:56

标签: python html parsing web-scraping beautifulsoup

我在一个文件夹中有30911个html文件。我需要(1)检查它是否包含标签:

<strong>123</strong>

和(2)提取以下内容直到本节结束。

但我发现问题是其中一些在

之前结束了
<strong>567</strong>

其中一些没有这样的标签,在

之前结束
<strong>89/strong> or others(that I do not know because I cant check 30K+files)

每个文件中也有不同的p p_number,有时没有id

首先我使用beautifulsoup进行搜索,但我不知道如何进行下一个提取内容

soup = bs4.BeautifulSoup(fo, "lxml")
m = soup.find("strong", string=re.compile("123"))
是的,可以将内容保存为txt格式,但它看起来像html格式?

line 1
line 2
...
lin 50

如果使用p.get_text(strip = true),它们就在一起了。

line1 content line2 content ... 
line50 content....

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以先找到起点 - strong元素,其中p元素带有“问答会话”文本。然后,您可以遍历strong元素的next siblings,直到您点击具有“版权政策”文字的import re from bs4 import BeautifulSoup data = """ <body> <p class="p p4" id="question-answer-session"> <strong> Question-and-Answer Session </strong> </p> <p class="p p4"> Hi John and Greg, good afternoon. contents.... </p> <p class="p p14"> <strong> Copyright policy: </strong> other content about the policy.... </p> </body> """ soup = BeautifulSoup(data, "html.parser") def find_question_answer(tag): return tag.name == 'p' and tag.find("strong", text=re.compile(r"Question-and-Answer Session")) question_answer = soup.find(find_question_answer) for p in question_answer.find_next_siblings("p"): if p.find("strong", text=re.compile(r"Copyright policy")): break print(p.get_text(strip=True)) 元素的元素。

完整的可重复示例:

Hi John and Greg, good afternoon. contents....

打印:

{{1}}