如何从维基百科中获取纯文本

2024-01-15

我想编写一个仅获取维基百科描述部分的脚本。也就是说,当我说

/wiki bla bla bla

它将转到维基百科页面为bla bla bla http://en.wikipedia.org/wiki/Bla_Bla_Bla,获取以下内容,并将其返回到聊天室:

“Bla Bla Bla”是一首歌的名字 由吉吉·达戈斯蒂诺制作。他描述了 这首歌是“我写的一首思考曲” 所有喋喋不休的人 没有说什么”。 突出但无意义的声音 样本取自英国乐队 Stretch 的歌曲《Why Did You Do It》

我怎样才能做到这一点?


这里有一些不同的可能方法;使用适合您的任何一个。我下面所有的代码示例都使用requests http://docs.python-requests.org/en/master/对于 API 的 HTTP 请求;你可以安装requests with pip install requests如果你有皮普。他们也都使用媒体维基API https://www.mediawiki.org/wiki/API:Main_page,并且两个使用query https://www.mediawiki.org/wiki/API:Query终点;如果您需要文档,请点击这些链接。

1. 使用以下命令直接从 API 获取整个页面或页面“提取”的纯文本表示形式extracts prop

请注意,此方法仅适用于 MediaWiki 网站文本提取扩展 https://www.mediawiki.org/wiki/Extension:TextExtracts。这尤其包括维基百科,但不包括一些较小的 Mediawiki 网站,例如,http://www.wikia.com/ http://www.wikia.com/

你想点击这样的网址

分解它,我们在那里得到以下参数(记录在https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extracts https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extracts):

  • action=query, format=json, and title=Bla_Bla_Bla都是标准 MediaWiki API 参数
  • prop=extracts让我们使用 TextExtracts 扩展
  • exintro限制对第一节标题之前内容的响应
  • explaintext使响应中的摘录为纯文本而不是 HTML

然后解析 JSON 响应并提取摘录:

>>> import requests
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'extracts',
...         'exintro': True,
...         'explaintext': True,
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> print(page['extract'])
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

2. 使用以下命令获取页面的完整 HTMLparse端点,解析它并提取第一段

MediaWiki 有一个parse终点 https://www.mediawiki.org/wiki/API:Parsing_wikitext#parse你可以用类似的 URL 来访问获取页面的 HTML。然后你可以使用 HTML 解析器来解析它,例如lxml http://lxml.de/(首先安装它pip install lxml) 提取第一段。

例如:

>>> import requests
>>> from lxml import html
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'parse',
...         'page': 'Bla Bla Bla',
...         'format': 'json',
...     }
... ).json()
>>> raw_html = response['parse']['text']['*']
>>> document = html.document_fromstring(raw_html)
>>> first_p = document.xpath('//p')[0]
>>> intro_text = first_p.text_content()
>>> print(intro_text)
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

3. 自己解析维基文本

您可以使用query用于获取页面的维基文本的 API,使用它来解析它mwparserfromhell(首先使用安装它pip install mwparserfromhell),然后使用将其缩减为人类可读的文本strip_code http://mwparserfromhell.readthedocs.io/en/latest/api/mwparserfromhell.html#mwparserfromhell.wikicode.Wikicode.strip_code. strip_code在撰写本文时还不能完美地工作(如下面的示例所示),但希望能够改进。

>>> import requests
>>> import mwparserfromhell
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'revisions',
...         'rvprop': 'content',
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> wikicode = page['revisions'][0]['*']
>>> parsed_wikicode = mwparserfromhell.parse(wikicode)
>>> print(parsed_wikicode.strip_code())
{{dablink|For Ke$ha's song, see Blah Blah Blah (song). For other uses, see Blah (disambiguation)}}

"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

Background and writing
He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch's song "Why Did You Do It"''.

Music video
The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.

Chart performance
Chart (1999-00)PeakpositionIreland (IRMA)Search for Irish peaks23

References

External links


Category:1999 singles
Category:Gigi D'Agostino songs
Category:1999 songs
Category:ZYX Music singles
Category:Songs written by Gigi D'Agostino
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从维基百科中获取纯文本 的相关文章

随机推荐

  • 反映.net中的常量属性/字段[重复]

    这个问题在这里已经有答案了 我有一个类 如下所示 public class MyConstants public const int ONE 1 public const int TWO 2 Type thisObject public M
  • 镜像(翻转)视图/进度条

    我有一个定制的圆形进度条 用于时钟上的秒计数器 我想翻转它 以便时钟逆时针计数 在这里搜索解决方案 我发现了这个 从右到左进度条 https stackoverflow com questions 3877823 right to left
  • 如何验证 PAC(代理自动配置)文件内的 Socks 5 代理

    如何设置 PAC 文件以使用带有身份验证的 SOCKS 代理 使用这个简单的 PAC 文件作为示例 function FindProxyForURL url host return SOCKS 69 123 133 75 7257 您将如何
  • 尝试向按钮添加触发器以更改按钮的 Content 属性

    我有一个用户控件 上面有一个按钮 UserControl 有一个名为 IsNew 的 DependencyProperty 这是一个布尔值 如果在控件中编辑的对象是新创建的并且尚未写入数据库 则该值设置为 true 否则就是假的 我有一个按
  • 如何使用python识别中文或英文名字[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一堆名字 我们如何找出哪些是中文名 哪些是英文名 对于中文名字 我建立了一个中文姓氏列表来找出中文名字 比如李小龙 李是中国姓氏
  • Chrome 扩展程序安装

    我有 chrome 扩展 它是使用安装程序安装的 该安装程序安装一些进程和浏览器扩展 根据 chrome 安全性更改 独立安装将被阻止 谷歌将阻止本地 Chrome 扩展程序 http thenextweb com google 2013
  • Webkit 浏览器根据 colspan 渲染表格

    请告知我是否出现幻觉 我希望如此 因为我无法根据浏览器正确渲染表格 我希望有人能为我提供解决方案 我的问题是 某些表格在使用 webkit 的浏览器 即 Safari 和 Chrome 中不显示右侧边框 根据帮助下的关于菜单项 我使用的 S
  • VBA 使用 OFT 模板从 Excel 发送电子邮件 - 禁止自动签名

    我创建了一个宏 用于打开 Outlook 电子邮件模板以供用户发送 以及从电子表格中提取的一些附加信息 一切都很顺利 只是 Outlook 会根据用户设置自动附加签名 虽然我可以很容易地关闭自己的签名 但我并不是唯一可能运行此宏的人 电子邮
  • “docker ps -a”是什么意思?

    经常使用 Docker 的任何人都熟悉常用命令docker ps and docker ps a 我知道docker ps列出了 Docker 引擎中所有正在运行的容器 但是 ps 实际上意味着什么 我也知道docker ps a具有还列出
  • 使用 FOP 中的 OutputStream 渲染图像

    我想在 PDF 上渲染图像 该图像将由 FOP 生成 为了渲染图像 我使用标签
  • 手动将搭配添加到 gensim 短语器

    我正在对语言学论文进行主题建模 并使用 Gensim 短语来识别频繁的搭配 我希望能够将术语 do support 和 it clefts 标记为一个单词 因为它们是特定的语言术语 但是 如果我在取出停用词后制作 Gensim 模型 则不会
  • MSHTML:CreateDocumentFromString 而不是 CreateDocumentFromUrl

    我想使用 MSHTML 库来解析字符串变量中的一些 HTML 但是 我不知道该怎么做 我可以轻松解析给定已知 URL 的网页内容 但不能直接解析源 HTML 这可能吗 如果是这样 怎么办 Public Sub ParseHTML sHTML
  • 身份验证和资源服务器之间的 OAuth v2 通信

    我在理解 OAUTH v2 的工作原理时遇到一些困难 The OAuth 版本 2 规范 https datatracker ietf org doc html draft ietf oauth v2 16 section 7 reads
  • 反射式获取项目中的所有包?

    如何反思性地获取项目中的所有包 我从 Package getPackages 开始 但这只获取了与当前包关联的所有包 有没有办法做到这一点 PhilippWendler 的评论让我找到了一种完成我需要的方法 我稍微调整了该方法以使其递归 R
  • 错误 4:从“错误”中选择“消息”,其中“错误”= 1707(也是 1709)

    我使用 WiX 3 8 创建了一个 MSI 安装程序 安装时在 MSI 日志的最后出现此错误 Property C WIXUI INSTALLDIR VALID 1 Logging stopped 8 20 2014 19 15 03 No
  • Keycloak - Infinispan Redis 缓存存储

    目前正在以standalone ha模式设置keycloak集群 以便能够在docker swarm上运行 在 keycloak 中 用户会话缓存在嵌入式 infinispan 存储中 并且 infinispan 可以配置为跨集群的分布式缓
  • 函子定律是否证明了结构的完全保留?

    在文档中数据函子 http hackage haskell org package base docs Data Functor html以下两条被规定为函子法则 所有函子都应遵守 fmap id id fmap f g fmap f fm
  • makecontext 参数 #2 的 C++0x lambda

    我在将 C 0x lambda 函数作为第二个参数传递给makecontext 来自 ucontext h 的签名makecontext is void makecontext ucontext t void int 以前 我能够应用 C
  • 忽略模糊匹配并使用 javascript 添加精确的单词模式匹配

    我正在尝试为我的网站创建一个文本突出显示选项 但我想要精确的单词匹配而不是模糊的单词匹配 我的代码匹配所有类型的实例 并且存在一些区分大小写的问题 如果我们以 Jfiddle 为例 我只想添加这个词cancer 区分大小写不应该成为问题 并
  • 如何从维基百科中获取纯文本

    我想编写一个仅获取维基百科描述部分的脚本 也就是说 当我说 wiki bla bla bla 它将转到维基百科页面为bla bla bla http en wikipedia org wiki Bla Bla Bla 获取以下内容 并将其返