解码wikipediaapi为Python请求库返回的标题

2024-09-30 22:20:31 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码在wikipediaapi中查询“Physics”类别中的页面,并将响应转换为Python字典。在

import ast
import requests
url = "https://en.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Physics&cmlimit=500&cmcontinue="
response = requests.get(url)
text = response.text
dict = ast.literal_eval(sourceCode)

以下是Wikipedia API返回的结果之一:

^{pr2}$

"Blasius\u2013Chaplygin formula"对应的Wikipedia页面是https://en.wikipedia.org/wiki/Blasius–Chaplygin_formula。在

我想用“标题”从维基百科下载页面。我用下划线替换了所有空格。但它失败了。我在做:

import requests
url = "https://en.wikipedia.org/wiki/Blasius\u2013Chaplygin_formula"
response = requests.get(url)

这给了我:

requests.exceptions.HTTPError: 404 Client Error:
Not Found for url: https://en.wikipedia.org/wiki/Blasius%5Cu2013Chaplygin_formula

如何将标题Blasius\u2013Chaplygin formula更改为requests可以成功调用的URL?在

当我试图在这个关于堆栈溢出的问题中插入Wikipedia链接时,Stack Overflow自动将其转换为https://en.wikipedia.org/wiki/Blasius%E2%80%93Chaplygin_formula。在

当我这么做的时候:

import requests
url = "https://en.wikipedia.org/wiki/Blasius%E2%80%93Chaplygin_formula"
response = requests.get(url)

它是成功的,所以我想要一个库,它可以进行像这样的转换,我可以在Python中使用。在


Tags: httpsorgimporturlgetresponsewiki页面
2条回答

为了让您的生活更轻松,您可以始终使用一些现有的wikipediaapi包装器,例如Wikipedia-API。在

import wikipediaapi
api = wikipediaapi.Wikipedia('en')

# it will shield you from URL encoding problems
p = api.page('Blasius\u2013Chaplygin formula')
print(p.summary)

# and it can make your code shorter
physics = api.page('Category:Physics')
for p in physics.categorymembers.values():
  print(f'[{p.title}]\t{p.summary}')

{cd1>这是一个unicode字符。python会自动将其转换为en破折号,但不能在wikipedia链接中添加破折号,因此必须对其进行url编码,这正是stackoverflow之前为您做的工作。在

您可以自己使用以下方法:

import requests
import urllib.parse

url = "Blasius\u2013Chaplygin_formula"
response = requests.get("https://en.wikipedia.org/wiki/" + urllib.parse.quote(url))

How to urlencode a querystring in Python?

相关问题 更多 >