2016-05-15 8 views
0

In Python versuche ich, eine Tabelle aus einer HTML-Datei zu nehmen und diese Tabellenattribute dann in einer Liste zu speichern, damit ich dann einen Vergleich in geänderten Tabellendaten vornehmen kann. Ich konnte Mechanize verwenden, um den Download der HTML-Seite zu automatisieren, die hinter einer ID \ Password-Anmeldung stand, aber der zweite Teil des Platzierens der Daten in Listen sieht vor, dass die Ausgabe wie folgt mit den vorhandenen Tags ausgegeben wird. So, wie es scheint, habe ich das Problem der Speicherung der Daten gelöst, bin ich unsicher, wie Sie die Tags entfernen, bevor Sie die Daten übergeben?Python - BeautifulSoup - Extrahieren von Tabellendaten mit angehängten Tags

Link zu HTML-Dokument:, die ich Daten aus ziehen versuchen: https://www.dropbox.com/s/b684ecl7b2l3m10/guildwar.html?dl=0

Beispielausgabe: (oberer Teil), Code beginnt bei Temperaturen von BS4

[None, None, None, <td class="t1"> 1 </td>, <td class="t1"> 2 </td>,  <td class="t1"> 3 </td>] 




from bs4 import BeautifulSoup 

soup = BeautifulSoup(open("guildwar.html")) 

rank_0 = [] 
color_1 = [] 
name_2 = [] 
land_3 = [] 
fortress_4 = [] 
power_5 = [] 


for el in soup.findAll('tr'): 
    rank = el.find('td', {'class':'t1'}) 
    rank_0.append(rank) 
    color = el.find('td', {'class':'t2'}) 
    color_1.append(color) 
    name = el.find('td', {'class':'t3'}) 
    name_2.append(name) 
    land = el.find('td', {'class':'t4'}) 
    land_3.append(land) 
    fortress = el.find('td', {'class':'t5'}) 
    fortress_4.append(fortress) 
    power = el.find('td', {'class':'t6'}) 
    power_5.append(power) 

print("Ranking") 
print(rank_0) 
print("\nMagic Color") 
print(color_1) 
print("\nMage Name") 
print(name_2) 
print("\nLand") 
print(land_3) 
print("\nFortress") 
print(fortress_4) 
print("\nPower") 
print(power_5) 

== =========================

Antwort

1

Sie können text Attribut auf das Element, wie folgt verwenden:

In [2]: s = '<tr><td class="t1"> 1 </td>, <td class="t1"> 2 </td>,  <td class="t1"> 3 </td></tr>' 

In [4]: soup = BeautifulSoup(s, "lxml") 

In [5]: for el in soup.findAll('tr'): 
    ...:  rank = el.find('td', {'class': 't1'}) 
    ...:  print("Ranking > ", rank.text) # use text attribute 
    ...:  
Ranking > 1 

Auf einer Seite zur Kenntnis, würde ich speichern wahrscheinlich die ganze <table> und vergleichen, wenn sie im Laufe der Zeit ändert, können Sie dann Zeit zu vergleichen alle einzelnen Spalte speichern ... und nur die Daten speichern, wenn es ein Update/Änderung .

Verwandte Themen