12-04-2026  (3 ) Categoria: Python

Python - install - uti wiki - dibuix gr脿fic

Instal路laci贸 i passos (molt f脿cils)

01

Comprovar si ja tens Python instal路lat

Pas inicial

Molts ordinadors moderns ja el porten, aix铆 que val la pena mirar-ho primer.

  • Prem Tecla Windows

  • Escriu cmd i obre la finestra negra (S铆mbol del sistema)

  • Escriu: python --version

  • Si et surt un n煤mero (per exemple Python 3.10), ja el tens instal路lat

02

Instal路lar Python (si no hi 茅s)

Important

Python 茅s gratu茂t i segur, i la instal路laci贸 茅s molt senzilla.

https://www.python.org/downloads/

  • Entra a la p脿gina i prem Download Python 3.x

  • Quan s鈥檕bri l鈥檌nstal路lador, marca la casella Add Python to PATH (molt important)

  • Prem Install Now i espera que acabi

03

Crear un fitxer amb el codi

El codi Python es guarda en un fitxer de text amb extensi贸 .py.

  • Obre el Bloc de notes

  • Copia-hi el codi Python que et vaig donar

  • Desa el fitxer com: comptar_categories.py (o el nom que vulguis)

  • Assegura鈥檛 que el tipus de fitxer 茅s Tots els fitxers i no .txt

04

Executar el codi

Ja gaireb茅 ho tens

Ara ja pots fer-lo funcionar i veure el resultat.

  • Torna a obrir cmd (S铆mbol del sistema)

  • Ves a la carpeta on tens el fitxer, per exemple: cd C:UsersEL_TEU_NOMDesktop

  • Escriu: python comptar_categories.py

  • Prem Enter i veur脿s el resultat a la pantalla

05

Interpretar el resultat

El programa et mostrar脿 quants articles hi ha a cada categoria.

  • Veureu l铆nies com: Articles a 'Cavalls': 41 Articles a 'Hipologia': 96

  • I el total sumat

  • Si vols afegir m茅s categories, t鈥檋o puc adaptar

______

programa Python complet que:

  1. Llegeixi una categoria de la Viquip猫dia (en catal脿)

  2. Recorri totes les subcategories recursivament

  3. Compti tots els articles que pengen de cadascuna

  4. I sumi el total de les dues categories: Cavalls i Hipologia

La manera correcta i robusta 茅s usar l鈥API de MediaWiki, no pas fer scraping.

Programa Python per comptar articles d鈥檜na categoria (amb subcategories)

Funciona per a qualsevol categoria de la Viquip猫dia en catal脿.

python
import requests

API = "https://ca.wikipedia.org/w/api.php"

def get_category_members(category, cmtype="page|subcat", continue_token=None):
    params = {
        "action": "query",
        "list": "categorymembers",
        "cmtitle": f"Categoria:{category}",
        "cmlimit": "500",
        "cmtype": cmtype,
        "format": "json"
    }
    if continue_token:
        params["cmcontinue"] = continue_token

    r = requests.get(API, params=params).json()
    members = r["query"]["categorymembers"]
    cont = r.get("continue", {}).get("cmcontinue")
    return members, cont

def count_articles_recursive(category, visited=None):
    if visited is None:
        visited = set()

    if category in visited:
        return 0
    visited.add(category)

    total = 0
    continue_token = None

    while True:
        members, continue_token = get_category_members(category, continue_token=continue_token)

        for m in members:
            if m["title"].startswith("Categoria:"):
                subcat = m["title"].replace("Categoria:", "")
                total += count_articles_recursive(subcat, visited)
            else:
                total += 1

        if not continue_token:
            break

    return total

if __name__ == "__main__":
    categories = ["Cavalls", "Hipologia"]
    grand_total = 0

    for cat in categories:
        print(f"Comptant articles de la categoria {cat}...")
        count = count_articles_recursive(cat)
        print(f" 鈫 {count} articles")
        grand_total += count

    print("nTOTAL SUMAT:", grand_total)

Qu猫 fa exactament aquest script

  • Usa action=query&list=categorymembers

  • Recorre totes les subcategories amb una crida recursiva

  • Evita bucles infinits amb un conjunt visited

  • Suma tots els articles (tipus page)

  • Funciona amb categories de qualsevol profunditat

________

versi贸 ampliada i professional del programa, amb totes les funcionalitats que has demanat:

  • Entrada interactiva de categories

  • Recorregut recursiu complet

  • Filtre per comptar nom茅s articles principals (namespace 0)

  • Generaci贸 d鈥檜n llistat complet d鈥檃rticles

  • Exportaci贸 a CSV (tant del recompte com del llistat)

Tot plegat mantenint l鈥櫭簊 correcte de l鈥橝PI de MediaWiki.

--------------


import requests import csv API = "https://ca.wikipedia.org/w/api.php" def get_category_members(category, cmtype="page|subcat", continue_token=None): params = { "action": "query", "list": "categorymembers", "cmtitle": f"Categoria:{category}", "cmlimit": "500", "cmtype": cmtype, "format": "json" } if continue_token: params["cmcontinue"] = continue_token r = requests.get(API, params=params).json() members = r["query"]["categorymembers"] cont = r.get("continue", {}).get("cmcontinue") return members, cont def count_and_list_articles(category, visited=None, articles=None): if visited is None: visited = set() if articles is None: articles = [] if category in visited: return articles visited.add(category) continue_token = None while True: members, continue_token = get_category_members(category, continue_token=continue_token) for m in members: title = m["title"] if title.startswith("Categoria:"): subcat = title.replace("Categoria:", "") count_and_list_articles(subcat, visited, articles) else: # Nom茅s namespace 0 (articles principals) if m["ns"] == 0: articles.append(title) if not continue_token: break return articles def save_csv(filename, articles): with open(filename, "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["T铆tol"]) for a in articles: writer.writerow([a]) if __name__ == "__main__": print("Introdueix categories separades per comes (ex: Cavalls,Hipologia):") user_input = input("Categories: ").strip() categories = [c.strip() for c in user_input.split(",")] all_articles = [] for cat in categories: print(f"nProcessant categoria: {cat}") articles = count_and_list_articles(cat) print(f" 鈫 {len(articles)} articles principals trobats") all_articles.extend(articles) save_csv(f"{cat}_articles.csv", articles) print(f" CSV generat: {cat}_articles.csv") # Eliminar duplicats si dues categories comparteixen articles all_articles = sorted(set(all_articles)) print("n=== RESULTATS FINALS ===") print(f"Total d鈥檃rticles 煤nics trobats: {len(all_articles)}") save_csv("totes_les_categories_articles.csv", all_articles) print("CSV global generat: totes_les_categories_articles.csv")

---------
DeepSeek trampa

programa en Python que, donada una URL d'una categoria de la Viquip猫dia en catal脿, recorri totes les subcategories de manera recursiva i compti tots els articles (p脿gines que no s贸n categories) que pengen d'ella.

A continuaci贸 et deixo el codi complet. Haur脿s d'instal路lar la llibreria requests i beautifulsoup4 si no les tens:

Codi
Bash

pip install requests beautifulsoup4

Codi

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
import time
import sys

def get_soup(url):
"""Obt茅 el contingut d'una p脿gina i el parseja amb BeautifulSoup"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return BeautifulSoup(response.text, 'html.parser')
except requests.RequestException as e:
print(f"Error carregant {url}: {e}")
return None

def extract_category_articles_and_subcats(soup, base_url):
"""Extreu els articles i subcategories d'una p脿gina de categoria"""
articles = []
subcategories = []

# Trobar la secci贸 de p脿gines (articles) - div amb id 'mw-pages'
pages_div = soup.find('div', id='mw-pages')
if pages_div:
# Dins d'aquest div, els articles estan en llistes (
  • )
    for li in pages_div.find_all('li'):
    link = li.find('a')
    if link and not 'Categoria:' in link.get('href', ''):
    articles.append(link.text)

    # Trobar la secci贸 de subcategories - div amb id 'mw-subcategories'
    subcats_div = soup.find('div', id='mw-subcategories')
    if subcats_div:
    for li in subcats_div.find_all('li'):
    link = li.find('a')
    if link and 'Categoria:' in link.get('href', ''):
    subcat_url = urljoin(base_url, link.get('href'))
    subcategories.append((link.text, subcat_url))

    return articles, subcategories

    def count_articles_in_category(category_url, visited=None, depth=0, verbose=True):
    """
    Compta recursivament tots els articles d'una categoria i les seves subcategories.
    Retorna (total_articles, llista_detall_articles)
    """
    if visited is None:
    visited = set()

    # Evitar bucles infinits
    if category_url in visited:
    if verbose:
    print("聽 " * depth + f"鈿狅笍聽 Ja visitat: {category_url}")
    return 0, []

    visited.add(category_url)

    if verbose:
    print("聽 " * depth + f"



  • versió per imprimir