zuerst den Anker wählen Sie die href verwenden, dann finden die sechs vorherigen TDs:
from bs4 import BeautifulSoup
import requests
url = 'http://www.eia.gov/dnav/pet/pet_sum_sndw_dcus_nus_w.htm'
soup = BeautifulSoup(requests.get(url).content,"html.parser")
anchor = soup.select_one("a[href=./hist/LeafHandler.ashx?n=PET&s=W_EPOOXE_YIR_NUS_MBBLD&f=W]")
data = [td.text for td in anchor.find_all_previous("td","DataB", limit=6)]
Wenn wir den Code ausführen, können Sie sehen, wir Text aus dem vorherigen sechs TDs erhalten:
In [1]: from bs4 import BeautifulSoup
...: import requests
...: url = 'http://www.eia.gov/dnav/pet/pet_sum_sndw_dcus_nus_w.htm'
...: soup = BeautifulSoup(requests.get(url).content,"html.parser")
...: anchor = soup.select_one("a[href=./hist/LeafHandler.ashx?n=PET&s=W_EPOOX
...: E_YIR_NUS_MBBLD&f=W]")
...: data = [td.text for td in anchor.find_all_previous("td","DataB", limit=6
...:)]
...:
In [2]: data
Out[2]: ['934', '919', '957', '951', '928', '139']
das ganz da nicht bekommen, da es so gibt es zwei verschiedene Klassen für die td Strom2 und DataB SDO können wir die Eltern von verwenden der Anker, der ein td selbst sein wird:
In [5]: from bs4 import BeautifulSoup
...: import requests
...: url = 'http://www.eia.gov/dnav/pet/pet_sum_sndw_dcus_nus_w.htm'
...: soup = BeautifulSoup(requests.get(url).content,"html.parser")
...: anchor_td = soup.find("a", href="./hist/LeafHandler.ashx?n=PET&s=W_EPOOXE_Y
...: IR_NUS_MBBLD&f=W").parent
...: data = [td.text for td in anchor_td.find_all_previous("td", limit=6)]
...:
In [6]: data
Out[6]: ['936', '934', '919', '957', '951', '928']
Jetzt bekommen wir genau was wir wollen.
Schließlich konnten wir die Großeltern des Ankers dh die Haupt td dann eine Auswahl die die sowohl die in unserer Klasse Namen verwenden bekommen wählen:
href = "./hist/LeafHandler.ashx?n=PET&s=W_EPOOXE_YIR_NUS_MBBLD&f=W"
grandparent = soup.find("a", href=href).parent.parent
data = [td.text for td in grandparent.select("td.Current2,td.DataB")]
Wieder Daten geben uns die gleiche Ausgabe.
sieht aus wie Sie die Seitendaten im .xls-Format erhalten können http://www.eia.gov/dnav/pet/xls/PET_SUM_SNDW_DCUS_NUS_W.xls kann einfacher sein, das zu analysieren? – Mono
Danke. Ich habe das gesehen, war aber nur neugierig, ob jemand in Python etwas Ähnliches versucht hat. – judabomber
Sie können auch [.xls in Python analysieren] (http: // stackoverflow.com/questions/2942889/lesen-parsing-excel-xls-files-with-python). Aber wenn Sie es mit BeautifulSoup tun wollen. Ich nehme an, Sie versuchen, alle Daten aus der HTML-Tabelle zu extrahieren? oder ist es nur die Zeile, die diesem spezifischen href zugeordnet ist? – Mono