我可以使用 pywikipedia 只获取页面的文本吗?
是否可以使用 pywikipedia 只获取页面的文本,而不需要任何内部链接或模板? 没有图片等?
Is it possible, using pywikipedia, to get just the text of the page, without any of the internal links or templates & without the pictures etc.?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您的意思是“我只想获取 wikitext”,那么请查看 wikipedia.Page 类和 get 方法。
这样您就可以从文章中获得完整的原始维基文本。
如果你想去掉 wiki 语法,比如将
[[Concept inventory]]
转换为 Concept inventory 等,那就会有点痛苦。造成这个麻烦的主要原因是 MediaWiki wiki 语法没有定义的语法。 这使得它很难解析和剥离。 目前我不知道任何软件可以让你准确地做到这一点。 当然还有 MediaWiki Parser 类,但它是 PHP,有点难以掌握,而且其目的非常不同。
但是,如果您只想删除链接,或者非常简单的 wiki 结构,请使用正则表达式:
然后用于管道链接:
等等。
但是,例如,没有可靠的简单方法可以从页面中删除嵌套模板。 对于评论中带有链接的图像也是如此。 这非常困难,需要递归地删除最内部的链接并用标记替换它并重新开始。 如果您愿意,可以查看 wikipedia.py 中的
templateWithParams
函数,但它并不漂亮。If you mean "I want to get the wikitext only", then look at the
wikipedia.Page
class, and theget
method.This way you get the complete, raw wikitext from the article.
If you want to strip out the wiki syntax, as is transform
[[Concept inventory]]
into Concept inventory and so on, it is going to be a bit more painful.The main reason for this trouble is that the MediaWiki wiki syntax has no defined grammar. Which makes it really hard to parse, and to strip. I currently know no software that allows you to do this accurately. There's the MediaWiki Parser class of course, but it's PHP, a bit hard to grasp, and its purpose is very very different.
But if you only want to strip out links, or very simple wiki constructs use regexes:
and then for piped links:
and so on.
But for example, there is no reliable easy way to strip out nested templates from a page. And the same goes for Images that have links in their comments. It's quite hard, and involves recursively removing the most internal link and replacing it by a marker and start over. Have a look at the
templateWithParams
function in wikipedia.py if you want, but it's not pretty.Github 上有一个名为 mwparserfromhell 的模块,可以根据您的需要让您非常接近您想要的内容。 它有一个名为 strip_code() 的方法,可以去除大量标记。
比较片段:
There is a module called mwparserfromhell on Github that can get you very close to what you want depending on what you need. It has a method called strip_code(), that strips a lot of the markup.
Comparison snippet:
您可以使用 wikitextparser。 例如:
会给你:
You can use wikitextparser. For example:
will give you:
Pywikibot 能够删除任何 wiki 文本或 html 标签。 textlib 中有两个函数:
removeHTMLParts
(text: str, keeptags=['tt', 'nowiki', 'small', 'sup']) -> 字符串:
返回不包含禁用 HTML 标记的部分的文本,但在 html 标记之间保留文本。 例如:
这将打印:
removeDisabledParts
(text: str, Tags=None, include=[], site=None) -> 字符串:
返回不包含禁用 wiki 标记部分的文本。 这删除 wikitext 文本中的文本。 例如:
这将打印:
有很多预定义的标签需要删除或保留,例如
'评论'、'标题'、'链接'、'模板'
;标签参数的默认值为
['comment', 'includeonly', 'nowiki', 'pre', 'syntaxhighlight']
其他一些例子:
removeDisabledPartsParts('See [[this link]]',tags=['link'])
给出'See '
removeDisabledPartsParts('', Tags=['comment'])
给出''
removeDisabledPartsParts('{{Infobox}}',tags=['template'])
给出''
,但仅适用于 Pywikibot 6.0.0 或更高版本Pywikibot is able to remove any wikitext or html tags. There are two functions inside textlib:
removeHTMLParts
(text: str, keeptags=['tt', 'nowiki', 'small', 'sup']) -> str:
Return text without portions where HTML markup is disabled but keeps text between html tags. For example:
this will print:
removeDisabledParts
(text: str, tags=None, include=[], site=None) -> str:
Return text without portions where wiki markup is disabled. This removes text inside wikitext text. For example:
this will print:
There are a lot of predefined tags to be removed or to be kept like
'comment', 'header', 'link', 'template'
;default for tags parameter is
['comment', 'includeonly', 'nowiki', 'pre', 'syntaxhighlight']
Some other examples:
removeDisabledPartsParts('See [[this link]]', tags=['link'])
gives'See '
removeDisabledPartsParts('<!-- no comments -->', tags=['comment'])
gives''
removeDisabledPartsParts('{{Infobox}}', tags=['template'])
gives''
, but works only for Pywikibot 6.0.0 or higher