Content of infobox of Wikipedia

前端 未结 3 1609
轮回少年
轮回少年 2020-12-09 23:18

I need to get the content of an infobox of any movie. I know the name of the movie. One way is to get the complete content of a Wikipedia page and then parse it until I find

相关标签:
3条回答
  • 2020-12-09 23:38

    Another great MediaWiki parser is mwparserfromhell.

    In [1]: import mwparserfromhell
    
    In [2]: import pywikibot
    
    In [3]: enwp = pywikibot.Site('en','wikipedia')
    
    In [4]: page = pywikibot.Page(enwp, 'Waking Life')            
    
    In [5]: wikitext = page.get()               
    
    In [6]: wikicode = mwparserfromhell.parse(wikitext)
    
    In [7]: templates = wikicode.filter_templates()
    
    In [8]: templates?
    Type:       list
    String Form:[u'{{Use mdy dates|date=September 2012}}', u"{{Infobox film\n| name           = Waking Life\n| im <...> critic film|waking-life|Waking Life}}', u'{{Richard Linklater}}', u'{{DEFAULTSORT:Waking Life}}']
    Length:     31
    Docstring:
    list() -> new empty list
    list(iterable) -> new list initialized from iterable's items
    
    In [10]: templates[:2]
    Out[10]: 
    [u'{{Use mdy dates|date=September 2012}}',
     u"{{Infobox film\n| name           = Waking Life\n| image          = Waking-Life-Poster.jpg\n| image_size     = 220px\n| alt            =\n| caption        = Theatrical release poster\n| director       = [[Richard Linklater]]\n| producer       = [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West\n| writer         = Richard Linklater\n| starring       = [[Wiley Wiggins]]\n| music          = Glover Gill\n| cinematography = Richard Linklater<br />[[Tommy Pallotta]]\n| editing        = Sandra Adair\n| studio         = [[Thousand Words]]\n| distributor    = [[Fox Searchlight Pictures]]\n| released       = {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}\n| runtime        = 101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>\n| country        = United States\n| language       = English\n| budget         =\n| gross          = $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>\n}}"]
    
    In [11]: infobox_film = templates[1]
    
    In [12]: for param in infobox_film.params:
                 print param.name, param.value
    
     name             Waking Life
    
     image            Waking-Life-Poster.jpg
    
     image_size       220px
    
     alt             
    
     caption          Theatrical release poster
    
     director         [[Richard Linklater]]
    
     producer         [[Tommy Pallotta]]<br />[[Jonah Smith]]<br />Anne Walker-McBay<br />Palmer West
    
     writer           Richard Linklater
    
     starring         [[Wiley Wiggins]]
    
     music            Glover Gill
    
     cinematography   Richard Linklater<br />[[Tommy Pallotta]]
    
     editing          Sandra Adair
    
     studio           [[Thousand Words]]
    
     distributor      [[Fox Searchlight Pictures]]
    
     released         {{Film date|2001|01|23|[[Sundance Film Festival|Sundance]]|2001|10|19|United States}}
    
     runtime          101 minutes<!--Theatrical runtime: 100:40--><ref>{{cite web |title=''WAKING LIFE'' (15) |url=http://www.bbfc.co.uk/releases/waking-life-2002-3|work=[[British Board of Film Classification]]|date=September 19, 2001|accessdate=May 6, 2013}}</ref>
    
     country          United States
    
     language         English
    
     budget          
    
     gross            $3,176,880<ref>{{cite web|title=''Waking Life'' (2001)|work=[[Box Office Mojo]] |url=http://www.boxofficemojo.com/movies/?id=wakinglife.htm|accessdate=March 20, 2010}}</ref>
    

    Don't forget that params are mwparserfromhell objects too!

    0 讨论(0)
  • 2020-12-09 23:38

    You can get the wikipage content with pywikipdiabot, and then, you can search for the infobox with regex, a parser like mwlib [0], or even stick with pywikipediabot and use one of his template tools. For example on textlib you'll find some functions to deal with templates (hint: search for "# Functions dealing with templates"). [1]

    [0] - http://pypi.python.org/pypi/mwlib

    [1] - http://svn.wikimedia.org/viewvc/pywikipedia/trunk/pywikipedia/pywikibot/textlib.py?view=markup

    0 讨论(0)
  • 2020-12-09 23:44

    Instead of reinventing the wheel, check out DBPedia, which has already extracted all Wikipedia infoboxes into an easily parsable database format.

    0 讨论(0)
提交回复
热议问题