【问题标题】:Wikipedia API JSON with Python使用 Python 的 Wikipedia API JSON
【发布时间】:2014-07-20 22:21:54
【问题描述】:

我想从 Wikipedia API 调用的 JSON 文件中创建一个包含文森特梵高所有画作的 Python 列表。这是我用来发出请求的 URL:

http://en.wikipedia.org/w/api.php?format=json&action=query&titles=list%20of%20works%20by%20Vincent%20van%20Gogh&Page&prop=revisions&rvprop=content

正如您在浏览器中打开 URL 所看到的,它是一个巨大的文本块。我怎样才能开始从这个庞大的 JSON 返回中提取画作的标题?在问这个问题之前,我做了很多研究,并尝试了很多方法来解决它。如果这个 JSON 文件是一个有用的字典,那将会很有帮助,但我无法理解它。你将如何从这个 JSON 文件中提取绘画的名称?

【问题讨论】:

    标签: python json api wikipedia


    【解决方案1】:

    不要直接解析JSON API调用的结果,而是使用python wrapper

    import wikipedia
    
    page = wikipedia.page("List_of_works_by_Vincent_van_Gogh")
    print page.links
    

    还有other clients and wrappers

    或者,这里有一个使用BeautifulSoup HTML 解析器的选项:

    >>> from bs4 import BeautifulSoup
    >>> url = "http://en.wikipedia.org/wiki/List_of_works_by_Vincent_van_Gogh"
    >>> soup = BeautifulSoup(urlopen(url))
    >>> table = soup.find('table', class_="wikitable")
    >>> for row in table.find_all('tr')[1:]:
    ...     print(row.find_all('td')[1].text)
    ... 
    Still Life with Cabbage and Clogs
    Crouching Boy with Sickle, Black chalk and watercolor
    Woman Sewing, Watercolor
    Woman with White Shawl
    ...
    

    【讨论】:

    • 我刚试过,出错了,没有名为“wikipedia”的模块。顺便说一句,我正在使用 Python 3.4。
    • @rami7 你需要先安装模块。
    • 第二个问题,既然返回页面上的所有链接返回的不仅仅是画的标题,有没有办法过滤掉无价值的链接?例如链接到收藏这幅画的博物馆。
    • @rami7 不确定如何过滤不相关的链接,但我添加了替代解决方案,请检查更新。
    • 是的!该解决方案甚至更好,特别是因为我之前尝试使用 BeautifulSoup 并且失败了。我知道我有一张桌子,以及包含我的信息的各种 div,但无法让它工作。我看到您使用索引从表中提取相关数据。你这个男人亚历克。
    【解决方案2】:

    这是一种将您的列表放入熊猫数据框中的快速方法

    import pandas as pd
    url = 'http://en.wikipedia.org/wiki/List_of_works_by_Vincent_van_Gogh'
    df = pd.read_html(url, attrs={"class": "wikitable"})[0] # 0 is for the 1st table in this particular page
    df.head()
    

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 2021-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2016-07-12
      • 2013-01-18
      相关资源
      最近更新 更多