我有以下html:
<h2>blah</h2>
html content to extract
(here can come tags, nested structures too, but no top-level h2)
<h2>other blah</h2>
我可以在不使用string.split("<h2>")
python 的情况下提取内容吗?
(比如说,使用 BeautifulSoup 还是使用其他库?)
我有以下html:
<h2>blah</h2>
html content to extract
(here can come tags, nested structures too, but no top-level h2)
<h2>other blah</h2>
我可以在不使用string.split("<h2>")
python 的情况下提取内容吗?
(比如说,使用 BeautifulSoup 还是使用其他库?)
以下是一些使用来自http://htql.net的 HTQL 的测试代码:
sample="""<h2>blah</h2>
html content to extract
<div>test</div>
<h2>other blah<h2>
"""
import htql
htql.query(sample, "<h2 sep excl>2")
# [('\n html content to extract \n <div>test</div>\n ',)]
htql.query(sample, "<h2 sep> {a=<h2>:tx; b=<h2 sep excl>2 | a='blah'} ")
# [('blah', '\n html content to extract \n <div>test</div>\n ')]
使用 BeautifulSoup,使用.next_siblings
iterable 获取标签后面的文本:
>>> from bs4 import BeautifulSoup, NavigableString
>>> from itertools import takewhile
>>> sample = '<h2>blah</h2>\nhtml content to extract\n<h2>other blah<h2>'
>>> soup = BeautifulSoup(sample)
>>> print ''.join(takewhile(lambda e: isinstance(e, NavigableString), soup.h2.next_siblings))
html content to extract
这将查找元素后面的所有文本元素soup.h2
并将它们连接成一个字符串。
让我分享一个更强大的解决方案:
def get_chunk_after_tag(tag):
""" tag is a tag element in a bs4 soup.
"""
result = ''
for elem in tag.next_siblings:
if isinstance(elem, bs4.Tag) and elem.name == tag.name:
break
result += str(elem)
return result
<hX>
用于从to中提取文本<hX>
。它很容易修改以将文本从标签提取到另一个标签。