如何使用 Python 抓取类别维基百科页面类别中的子类别和页面

How to scrape Subcategories and pages in categories of a Category wikipedia page using Python

所以我试图抓取类别页面 header 下的所有子类别和页面:"Category: Class-based programming languages" 发现于:

https://en.wikipedia.org/wiki/Category:Class-based_programming_languages

我想出了一种使用 url 和 mediawiki API 来做到这一点的方法:类别成员。这样做的方法是:

但是,我找不到使用 Python 完成此操作的方法。有人可以帮我吗?

这是为了独立学习,我在这上面花了很多时间,但似乎无法弄清楚。此外,禁止使用 Beautifulsoup。感谢大家的帮助!

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>

右键单击它,然后单击 'copy 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

因此,如果您要查找所有 subcategory/page 个名称,您可以这样做,例如

pages = tree.xpath('//*[@id="mw-pages"]/text()')
subcategories = tree.xpath('//*[@id="mw-subcategories"]/text()')

For more information see here and here

好的,经过更多的研究和研究,我找到了自己问题的答案。使用 urllib.request 和 json 库,我以 json 格式导入了维基百科 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 帮助我!