2015-07-18 15 views
5

Czołgam tabelę z łączem internetowym i chciałby odbudować tablicę, usuwając wszystkie znaczniki skryptów. Oto kody źródłowe.Jak mogę usunąć wszystkie znaczniki skryptów w różnych BeautifulSoup?

response = requests.get(url) 
soup = BeautifulSoup(response.text) 
table = soup.find('table') 

for row in table.find_all('tr') :                                                                                                  
    for col in row.find_all('td'): 
     #remove all different script tags 
     #col.replace_with('') 
     #col.decompose() 
     #col.extract() 
     col = col.contents 

Jak mogę usunąć wszystkie inne tagi skryptu? Weź komórkę follow jako exampple, który zawiera znacznik a, br i td.

<td><a href="http://www.irit.fr/SC">Signal et Communication</a> 
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a> 
</td> 

Moja Oczekiwany wynik to:

Signal et Communication 
Ingénierie Réseaux et Télécommunications 
+0

spojrzeć na to: http://stackoverflow.com/questions/31462360/beautifulsoup-get-text-is-not-specific- wystarczająco-for-my-html-parsowania – dm295

Odpowiedz

5

Pytasz o get_text():

Jeśli chcesz tylko część tekstu dokumentu lub tagu można użyć metody get_text(). Zwraca cały tekst w dokumencie lub pod tagu, jako jeden ciąg znaków Unicode

td = soup.find("td") 
td.get_text() 

Zauważ, że .string wróci ci None w tym przypadku od td ma wiele dzieci:

Jeśli znacznik zawiera więcej niż jedną rzecz, nie jest jasne, do czego powinno się odnosić .string, czyli .string określa się None

Demo:

>>> from bs4 import BeautifulSoup 
>>> 
>>> soup = BeautifulSoup(u""" 
... <td><a href="http://www.irit.fr/SC">Signal et Communication</a> 
... <br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a> 
... </td> 
... """) 
>>> 
>>> td = soup.td 
>>> print td.string 
None 
>>> print td.get_text() 
Signal et Communication 
Ingénierie Réseaux et Télécommunications 
+0

Czy mogę użyć 'td.text'? Otrzymuje właściwy wynik. – SparkAndShine

+1

@SparkandShine to w zasadzie to samo ('text = własność (get_text)'). Powinieneś jednak użyć metody 'get_text()'. – alecxe

1

Spróbuj zadzwonić col.string. To da ci tylko tekst.

+0

Jaka jest różnica pomiędzy 'col.text' i' col.string'? – SparkAndShine

+0

Oto definicja tekstu z dokumentów pomocy tekstu: 'tekst | Uzyskaj wszystkie ciągi podrzędne, łączone za pomocą danego separator.' a dla łańcucha 'Jeśli ten znacznik ma pojedyncze dziecko ciąg, wartość zwracana jest ciągiem. Jeśli ten znacznik nie ma elementów podrzędnych lub więcej niż jedno dziecko, zwracana wartość to Brak. Jeśli ten znacznik ma jeden znacznik potomny, zwracana wartość jest atrybutem "ciąg" tagu podrzędnego, rekurencyjnie. " – blasko

+0

To nie działa i zwraca' Brak' z powodu wielu dzieci, jak powiedział @alecxe. – SparkAndShine

Powiązane problemy