Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何提取标记之间的所有文本?_Python_Html_Regex_Beautifulsoup - Fatal编程技术网

Python 如何提取标记之间的所有文本?

Python 如何提取标记之间的所有文本?,python,html,regex,beautifulsoup,Python,Html,Regex,Beautifulsoup,我想从中摘录一首随意的诗 使用BeautifulSoup,我能够找到标题和散文 print soup.find('div', class_="pre_poem").text print soup.find('table', class_="poem").text 但我想找到所有的诗,挑一首。 我应该使用正则表达式并匹配所有 和?假设您已经有一个合适的汤对象可以使用,以下内容可能会帮助您开始: poem_ids = [] for section in soup.find_all('ol', c

我想从中摘录一首随意的诗

使用BeautifulSoup,我能够找到标题和散文

print soup.find('div', class_="pre_poem").text
print soup.find('table', class_="poem").text
但我想找到所有的诗,挑一首。 我应该使用正则表达式并匹配所有

假设您已经有一个合适的
对象可以使用,以下内容可能会帮助您开始:

poem_ids = []

for section in soup.find_all('ol', class_="TOC"):
    poem_ids.extend(li.find('a').get('href') for li in section.find_all('li'))

poem_ids = [id[1:] for id in poem_ids[:-1] if id]
poem_id = random.choice(poem_ids)

poem_start = soup.find('a', id=poem_id)
poem = poem_start.find_next()
poem_text = []

while True:
    poem = poem.next_element

    if poem.name == 'h3':
        break

    if poem.name == None:
        poem_text.append(poem.string)

print '\n'.join(poem_text).replace('\n\n\n', '\n')
这首先从页面顶部的目录中提取诗歌列表。这些包含每首诗的唯一ID。接下来,选择一个随机ID,然后根据该ID提取匹配的诗歌

例如,如果选择了第一首诗,您将看到以下输出:

“箭与歌”由朗费罗(1807-1802)创作,排在第一位
这本书是出于对一个六岁的小女孩的尊重
我很乐意背诵给我听。她知道很多诗,但这是她的
最喜欢的
我向空中射出一支箭,
它掉到了地上,我不知道在哪里;
因为它飞得如此之快,这景象
无法跟随它飞行。
我向空中吹了一首歌,
它掉到了地上,我不知道在哪里;
谁的视力如此敏锐和强壮
它能跟随歌曲的飞行吗?
很久很久以后,在一棵橡树里
我发现那支箭还没有折断;
这首歌从头到尾,
我又在一个朋友的心里找到了。
亨利·W·朗费罗。
这是通过使用BeautifulSoup从每个元素中提取所有文本,直到找到下一个
标记,然后删除任何额外的换行符来完成的。

请改用。就意外后果而言,这更安全

所有程序员都不鼓励使用正则表达式解析HTML的原因是,页面的HTML标记不是静态的,尤其是当您的源HTML是网页时。正则表达式更适合于字符串


使用正则表达式的风险自负。

也许
find_all()
?您知道这个项目吗:?永远不要用正则表达式解析HTML。页面不是静态的论点实际上适用于您无法控制的任何数据解析。我想说一个更有力的论点是被解析的数据是不规则的。同意你的观点+我想听听你的意见