为什么Wikipedia API在Python中呼叫,引发了类型错误



我正在尝试使用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

相关内容

最新更新