La recopilación de información mediante el raspado

aún aprendiendo :

Estoy tratando de recoger los nombres de los políticos italianos raspando Wikipedia. Lo que se necesita es para raspar todas las partes de esta página: https://it.wikipedia.org/wiki/Categoria:Politici_italiani_per_partito , a continuación, para cada uno de ellos raspar todos los nombres de políticos dentro de ese partido (para cada uno de la lista del enlace que he mencionado anteriormente).

Por ejemplo, la primera parte de la página es: https://it.wikipedia.org/wiki/Categoria:Politici_di_Alleanza_Democratica , por lo que tendría que raspar esta página y obtener los siguientes nombres:

Ferdinando Adornato
Giuseppe Ayala
Giorgio Benvenuto
Enzo Bianco
Giorgio Bogi
Willer Bordon
Franco Castellazzi
Fabio Ciani
Oscar Giannino
Giorgio La Malfa
Miriam Mafai
Pierluigi Mantini
Ferdinando Schettino
Mariotto Segni
Giulio Tremonti

Escribí el siguiente código:

from bs4 import BeautifulSoup as bs
import requests

res = requests.get("https://it.wikipedia.org/wiki/Categoria:Politici_italiani_per_partito")
soup = bs(res.text, "html.parser")
array1 = {}
possible_links = soup.find_all('a')
for link in possible_links:
    url = link.get("href", "")
    if "/wiki/Provenienza" in url: # It is incomplete, as I should scrape also links including word "Politici di/dei"
        res1=requests.get("https://it.wikipedia.org"+url)
        print("https://it.wikipedia.org"+url)
        soup = bs(res1, "html.parser")
        possible_links1 = soup.find_all('a')
        for link in possible_links1:
            url_1 = link.get("href", "")
            array1[link.text.strip()] = url_1

pero no funciona, ya que no los nombres de recolección para cada parte. Recoge todas las partes (en la página Wikipedia que he mencionado anteriormente): sin embargo, cuando intento para raspar las páginas de las partes, que no recoge los nombres de político dentro de ese partido.

Espero que puedas ayudarme.

QHarr:

Se podría recoger las URLs y nombres de los partidos de la primera página y el bucle entonces esas direcciones URL y añadir la lista de nombres de políticos asociados a un diccionario cuya clave es el nombre del partido. Se podría ganar eficiencia del uso de un objeto de sesión y por lo tanto re-uso que subyace conexión TCP

from bs4 import BeautifulSoup as bs
import requests

results = {}

with requests.Session() as s: # use session object for efficiency of tcp re-use
    s.headers = {'User-Agent': 'Mozilla/5.0'}
    r = s.get('https://it.wikipedia.org/wiki/Categoria:Politici_italiani_per_partito')
    soup = bs(r.content, 'lxml')
    party_info = {i.text:'https://it.wikipedia.org/' + i['href'] for i in soup.select('.CategoryTreeItem a')} #dict of party names and party links

    for party, link in party_info.items():
        r = s.get(link)
        soup = bs(r.content, 'lxml')
        results[party] = [i.text for i in soup.select('.mw-content-ltr .mw-content-ltr a')] # get politicians names 

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=365394&siteId=1
Recomendado
Clasificación