Estrarre il testo da `p` in `div` con Coherence

Io sono molto nuovo per il web scraping con Python, e sono davvero avendo un momento difficile con l’estrazione di nidificati testo all’interno di HTML (p entro div, per essere esatti). Qui è quello che ho ottenuto finora:

from bs4 import BeautifulSoup
import urllib

url = urllib.urlopen('http://meinparlament.diepresse.com/')
content = url.read()
soup = BeautifulSoup(content, 'lxml')

Questo funziona bene:

links=soup.findAll('a',{'title':'zur Antwort'})
for link in links:
    print(link['href'])

Questa estrazione funziona bene:

table = soup.findAll('div',attrs={"class":"content-question"})
for x in table:
    print(x)

Questo è l’output:

<div class="content-question">
<p>[...] Die Verhandlungen über die mögliche Visabefreiung für    
türkische Staatsbürger per Ende Ju...
<a href="http://meinparlament.diepresse.com/frage/10144/" title="zur 
Antwort">mehr »</a>
</p>
</div>

Ora, voglio estrarre il testo all’interno di p e /p. Questo è il codice che uso:

table = soup.findAll('div',attrs={"class":"content-question"})
for x in table:
    print(x['p'])

Tuttavia, Python solleva un KeyError.

 

One Reply
  1. 6

    Il codice seguente calcola e stampa il testo di ogni p elemento div‘s con il class “content-domanda”

    from bs4 import BeautifulSoup
    import urllib
    
    url = urllib.urlopen('http://meinparlament.diepresse.com/')
    content = url.read()
    soup = BeautifulSoup(content, 'lxml')
    
    table = soup.findAll('div',attrs={"class":"content-question"})
    for x in table:
        print x.find('p').text
    
    # Another way to retrieve tables:
    # table = soup.select('div[class="content-question"]')

    Il seguente è il testo a stampa del primo p elemento table:

    […] Morire Verhandlungen über die mögliche Visabefreiung für türkische Staatsbürger per Ende Juni sind noch nicht abgeschlossen, sodass nicht mit Sicherheit gesagt werden kann, ob es zu diesem Zeitpunkt bereits zu einer Visabefreiung kommt. Auch die genauen Modalitäten einer solchen Visaliberalisierung sind noch nicht ausverhandelt. Prinzipiell ist es jedoch così, dass Visaerleichterungen bzw. -liberalisierungen eine Frage von Reziprozität sind.d.h. dass diese für beide Staaten gelten müssten. […]

    • Questa soluzione presuppone che il codice HTML utilizzato in modo corretto la pagina racchiude tutti i paragrafi in “p” elemento coppie. Ma questo non è spesso il caso, a volte svuotare gli elementi di p sono utilizzati per dividere il testo, a volte c’è il testo iniziale, seguita da campate di paragrafi, seguito dal testo finale, dove le iniziali o finali di testo non è racchiuso nel loro punto proprio span etc. La soluzione sopra solo restituire il testo racchiuso da un paio di apertura/chiusura di p elementi, ma non il testo tra di loro. Un modo per ottenere tutto ciò?

Lascia un commento