因此,我尝试抓取类别页面的类别标题下的所有子类别和页面:“类别:基于类的编程语言”,位于:
https://en.wikipedia.org/wiki/Category:基于类的编程语言
我已经找到了一种使用 url 和 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。谢谢大家的帮助!
好吧,经过更多的研究和学习,我找到了自己问题的答案。使用库
urllib.request
和 json
,我以 json 格式导入了维基百科 url 文件,并以这种方式简单地打印了其类别。这是我用来获取子类别的代码:
pages = urllib.request.urlopen("https://en.wikipedia.org/w/api.php?action=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'])
您可以对类别中的页面执行相同的操作。感谢尼莫试图帮助我!
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++”,然后单击“检查”,您将看到右侧的面板突出显示
<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()')