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

问题描述 投票:0回答:2

因此,我尝试抓取类别页面的类别标题下的所有子类别和页面:“类别:基于类的编程语言”,位于:

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。谢谢大家的帮助!

python json web-scraping wikipedia
2个回答
4
投票

好吧,经过更多的研究和学习,我找到了自己问题的答案。使用库

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'])

您可以对类别中的页面执行相同的操作。感谢尼莫试图帮助我!


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++”,然后单击“检查”,您将看到右侧的面板突出显示

<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()')

欲了解更多信息,请参阅此处此处

© www.soinside.com 2019 - 2024. All rights reserved.