2016-11-27 4 views
0

Ich versuche folgendes zu erhalten:Parsing Optionen Auswahl

<select name="Detect" id="313" class="select" style="display: none;"> 
<option value="650" maxmad="15" maxpad="2" status="TRUE" context="24"> 5 </option> 

<option value="660" maxmad="16" maxpad="2" status="TRUE" context="25"> 6 </option> 

ich kratzen will und die folgenden ausdrucken, die 650 von „Wert“ und die 15 von „maxmad“ und drucken Sie es wie dies (Es gibt eine Menge von diesen Optionen, und ich möchte sie alle drucken):

650: 15 
660: 16 
670: 17 
etc 
etc 

Hier ist, was ich habe versucht:

driver = webdriver.PhantomJS() 
window = driver.set_window_size(1120, 550) 
site = driver.get("www.website.com") 
soup = BeautifulSoup(site, "html.parser") 
for option in soup.find_all("option"): 
    print('id: {}, maxmad: {}'.format(option['id'], option.text)) 
+0

Wo ist die 314 in der Ausgabe aus Richtung . Es gibt nur eine "ID" und das ist 313 – Anthon

+0

Ich habe es nur hinzugefügt, um zu zeigen, was ich wollte, aber es gibt mehrere Optionen, ich habe nur einen von ihnen eingefügt, der Rest sieht identisch anders als andere IDs und maxmads – KingPey

+0

Gibt es mehrere nur mehrere Optionen, oder auch mehrere Auswahlen (die dir die ID geben – Anthon

Antwort

0

Mehrere Fehler, die schwieriger zu finden und auszuprobieren sind, weil Sie die Seite jedes Mal herunterladen. Sie sollten zuerst eine minimale HTML-Datei mit dem entsprechenden Code erstellen und diese dann zum Testen des Analysecodes verwenden.

Dann werden Sie als erstes feststellen, dass Sie site.find_all verwenden, wo Sie soup.find_all verwenden sollten. Nach dem Fixieren, dass Sie werden feststellen, dass option keine id hat, und dass Sie für select suchen soll, um das bekommen id:

from bs4 import BeautifulSoup 

html_str = """ 
<html> 
<body> 
<select name="Detect" id="313" class="select" style="display: none;"> 
<option value="650" maxmad="15" maxpad="2" status="TRUE" context="24"> 5 </option> 
<option value="660" maxmad="16" maxpad="2" status="TRUE" context="25"> 6 </option> 
</body> 
</html> 
""" 

soup = BeautifulSoup(html_str, "html.parser") 
select = soup.select("select")[0] 
for select in soup.select("select"): 
    ident = select['id'] 
    for option in select.find_all("option"): 
     print('value: {}, maxmad: {}'.format(option['value'], option['maxmad']) 

die gibt:

value: 650, maxmad: 15 
value: 660, maxmad: 16 
+0

Statt html_str, wie würde ich stattdessen dort eine Website verwenden? sind mehrere Optionen, ich habe nur einen eingefügt, also wie würde ich alle von ihnen drucken? – KingPey

+0

Wenn 'driver.get (" www.website.com ")' gibt Ihnen die HTML dann nur die ersten 3 Zeilen wieder an Ort und Stelle ersetzen 'html_str' mit' site'. – Anthon

+0

@KingPey Ich aktualisiere die Antwort. Sehr verwirrend, dass Sie maxmad nicht mit dem Wert des Attributs maxmad, sondern mit dem zugehörigen Text drucken. – Anthon

Verwandte Themen