所以我试图抓住类别页面的类别标题下的所有子类别和页面:"类别:基于类的编程语言"发现于:
https://en.wikipedia.org/wiki/Category:Class-based_programming_languages
我已经找到了使用网址和mediawiki API:Categorymembers的方法。这样做的方法是:
en.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Class-based%20programming%20languages&format=json&cmlimit=500
en.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Class-based%20programming%20languages&format=json&cmlimit=500&cmtype=subcat
但是,我找不到使用Python实现此目的的方法。任何人都可以帮助我吗?
这是为了独立学习,我花了很多时间在这上面,但似乎无法弄明白。此外,禁止使用Beautifulsoup。谢谢你的帮助!
答案 0 :(得分:3)
好的,经过更多的研究和研究,我能够找到自己问题的答案。使用库urllib.request和json,我以json格式导入了wikipedia url文件,并简单地以这种方式打印了它的类别。这是我用来获取子类别的代码:
pages = urllib.request.urlopen("https://en.wikipedia.org/w/api.phpaction=query&list=categorymembers&cmtitle=Category:Class-based%20programming%20languages&format=json&cmlimit=500&cmtype=subcat")
data = json.load(pages)
query = data['query']
category = query['categorymembers']
for x in category:
print (x['title'])
你可以为类别中的页面做同样的事情。感谢Nemo试图帮助我!
答案 1 :(得分:1)
import requests
from lxml import html
wiki_page = requests.get('https://en.wikipedia.org/wiki/Category:Class based_programming_languages')
tree = html.fromstring(wiki_page.content)
要建立你如何使用它的直觉,右键点击,比如'C ++',然后点击'inspect',你会看到右边的面板会突出显示
<a class="CategoryTreeLabel CategoryTreeLabelNs14
CategoryTreeLabelCategory" href="/wiki/Category:C%2B%2B">C++</a>
右键单击此按钮,然后单击“复制xpath”。对于C ++,这将为您提供
//*[@id="mw-subcategories"]/div/ul[1]/li/div/div[1]/a
同样,在页面下,对于'ActionScript',我们得到
//*[@id="mw-pages"]/div/div/div[1]/ul/li[1]/a
因此,如果您要查找所有子类别/页面名称,您可以这样做,例如
pages = tree.xpath('//*[@id="mw-pages"]/text()')
subcategories = tree.xpath('//*[@id="mw-subcategories"]/text()')