我正在尝试使用MediaWiki API在某些Wikipedia文章上获得过去的所有修订版(编辑(。该代码应检索FDR Wikipedia页面上的所有编辑。这是我为此写的代码:
import re
import requests
def GetRevisions():
url = "https://en.wikipedia.org/w/api.php?action=query=Franklin%20Delano%20Roosevelt=revisions&rvlimit=500&titles="
while True:
joan = requests.get(url)
revisions = []
revisions += re.findall('<continue rvcontinue="([^"]+)"',joan)
cont = re.search('<continue rvcontinue="([^"]+)"',joan)
if not cont:
break
return revisions
我不断遇到的问题是这个错误: TypeError: expected string or buffer
`我不确定为什么此错误会不断出现。任何人都可以为如何补救提供指导吗?
re.findall('<continue rvcontinue="([^"]+)"',joan)
joan
(谁是琼?(是请求对象,而不是字符串。您不能对其应用正则表达式。
此外,您正在使用的MediaWiki API URL是畸形的。它返回错误,而不是您要寻找的数据。
您可以通过请求MediaWiki API(format=json
(的JSON响应并使用.json()
对其进行解析,从而完全避免问题。请注意,我正在使用字典将参数传递到API - 这意味着我们不必逃脱查询字符串,并且可以更轻松地使用continue
参数更新查询…
url = "https://en.wikipedia.org/w/api.php"
query = {
"format": "json",
"action": "query",
"titles": "Franklin Delano Roosevelt",
"prop": "revisions",
"rvlimit": 500,
}
while True:
r = requests.get(url, params=query).json()
print repr(r) # Insert your own code to parse the response here
if 'continue' in r:
query.update(r['continue'])
else:
break