WIkipedia API 获取标题下的文本

发布于 2025-01-11 04:41:05 字数 773 浏览 0 评论 0原文

我可以在 wikipedia api 中使用 wikipedia 进行书写

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 中的某些功能来做到这一点。 第二次机会获取文本并使用某些模块在标题之间提取更多文本:在字符串中查找某些特定字符之间的一些文本

我已经尝试过:

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

但我没有工作: 输出只有[]

I can scripe a wikipedia usein wikipedia api

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

and I can from every element in a regex_result(Wikipedia headers ) get a text bellow and append it to another list. I dug the internet and I do not know how to do that with some function in Wikipedia API.
Second chance to get it in get a text and with some module extract a text between headers more here: find a some text in string bettwen some specific characters

I have tried this:

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

But I am not working:
output is only []

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

牛↙奶布丁 2025-01-18 04:41:05

您不想调用 re 两次,而是直接迭代 regex_result 提供的结果。 命名组,格式为 ( ?P...) 使得在没有周围标记的情况下提取标头名称变得更加容易。

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 将是所有顶级节标题的字符串列表。

这是我用来从 wiki 页面制作目录的方法。 (注意:f 字符串需要 Python 3.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)

You don't want to call re twice, but rather iterate directly through the results provided by regex_result. Named groups in the form of (?P<name>...) make it even easier to extract the header name without the surrounding markup.

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 will then be a list of strings of the all the top-level section headers.

Here's what I use to make a table of contents from a wiki page. (Note: f-strings require Python 3.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}}}
quot;

    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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文