维基百科 API 在 headers 下获取文本

WIkipedia API get text under headers

我可以在维基百科中使用维基百科api

import wikipedia
import re
page = wikipedia.page("Albert Einstein")
text = page.content
regex_result = re.findall("==\s(.+?)\s==", text)
print(regex_result)

我可以从 regex_result(Wikipedia headers ) 中的每个元素中获取下面的文本并将其附加到另一个列表。我在网上查了一下,但我不知道如何使用维基百科中的某些功能来做到这一点 API。 第二次机会在获取文本中获取它,并使用某些模块在此处提取 headers 之间的文本:

我试过这个:

l = 0
for n in regex_result:
    try:
        regal = re.findall(f"==\s{regex_result[l]}\s==(.+?)\s=={regex_result[l+1]}\s==", text)
        l+=2
    except Exception:
        continue

但我没有工作: 输出仅为 []

您不想调用 re 两次,而是直接遍历 regex_result 提供的结果。 Named groups(?P<name>...) 的形式使提取 header 名称变得更加容易,而无需周围的标记。

import wikipedia
import re
page = wikipedia.page("Albert Einstein")
text = page.content
# using the number 2 for '=' means you can easily find sub-headers too by increasing the value 
regex_result = re.findall("\n={2}\s(?P<header>.+?)\s={2}\n", text)

regex_result 将是所有 top-level 部分 header 的字符串列表。

这是我用来从 wiki 页面制作 table 内容的方法。 (注:f-strings需要Python3.6)

def get_wikiheader_regex(level):
    '''The top wikiheader level has two = signs, so add 1 to the level to get the correct number.'''
    assert isinstance(level, int) and level > -1
    header_regex = f"^={{{level+1}}}\s(?P<section>.*?)\s={{{level+1}}}$"

    return header_regex

def get_toc(raw_page, level=1):
    '''For a single raw wiki page, return the level 1 section headers as a table of contents.'''
    toc = []
    header_regex = get_wikiheader_regex(level=level)
    for line in raw_page.splitlines():
        if line.startswith('=') and re.search(header_regex, line):
            toc.append(re.search(header_regex, line).group('section'))

    return toc
 >>> get_toc(text)