我试图匹配的HTML是这样的......
...
<!-- Start Body -->
Paragraph 1<br><br>
Paragraph 2<br><br>
<!-- End Body -->
...
我抓的网站很旧,所以从页面到页面,它可以从br更改为段落标签等。这是一个混乱,唯一可靠的是所有内容我需要的是在开始正文和结束正文评论标签之间。
最好的方法是什么?我是应该使用beautifulsoup还是矫枉过正?
答案 0 :(得分:1)
我只是直接抓取文字,没有BeautifulSoup:
start = "<!-- Start Body -->"
end = "<!-- End Body -->"
html = "..." # Page HTML
_s = html.find(start)
_e = html.find(end)
if _s != -1 and _e != -1:
found = html[_s + len(start):_e]
在最后一行可能有一个off-by,但这应该让你开始。如果标签出现多次,您还需要决定该怎么做。
答案 1 :(得分:0)
您可以使用str.split
:
>>> html = '''
... ...
... <!-- Start Body -->
... Paragraph 1<br><br>
... Paragraph 2<br><br>
... <!-- End Body -->
... ...
... '''
>>> chunk = html.split('<!-- Start Body -->')[1].split('<!-- End Body -->')[0]
>>> print(chunk)
Paragraph 1<br><br>
Paragraph 2<br><br>
html.split('<!-- Start Body -->')[1]
- 在Start Body
评论.split('<!-- End Body -->')[0]
- 在End Body
评论使用re.findall
替代方案:
>>> import re
>>> re.findall('<!-- Start Body -->(.+?)<!-- End Body -->', html, flags=re.S)
['\nParagraph 1<br><br>\nParagraph 2<br><br>\n']