2016-06-15 3 views
1
import requests 
from bs4 import BeautifulSoup 

r = requests.get("http://www.nepalstock.com.np/marketdepthofcompany/238") 
soup = BeautifulSoup(r.content,"lxml") 
value_select = soup.select_one("select.form-control") 
for val in value_select.find("option")[1:]: 
    n = val['value'] 
    print (n) 

Warum druckt der obige Code Text aus dem HTML-Wert nicht den Attributwert?Extrahieren von Attributwert aus HTML

Antwort

2

Da find einen einzigen Tag gibt, müssen Sie find_all:

for val in value_select.find_all("option")[1:]: 
    n = val['value'] 
    print (n) 

Oder eine CSS-Selektor verwenden, um die erste Option überspringen:

for val in value_select.select("option + option"): 

Beide arbeiten gleich:

In [1]: import requests 

In [2]: from bs4 import BeautifulSoup 

In [3]: r = requests.get("http://www.nepalstock.com.np/marketdepthofcompany/238") 

In [4]: soup = BeautifulSoup(r.content,"lxml") 

In [5]: value_select = soup.select_one("select.form-control") 

In [6]: for val in value_select.find_all("option")[1:]: 
    ...:   n = val['value'] 
    ...:   print (n) 
    ...:  
ACEDBL 
ACEDPO 
ADBL 
AHPC 
ALDBL 
ALDBLP 
ALICL 
ALICLP 
APEX 
APEXPO 
API 
ARDBL 
ARDBLP 
ARUN 
ARUNPO 
AVU 
BARUN 
BBBLNP 
................................... 

In [7]: for val in value_select.select("option + option"): 
    ...:   n = val['value'] 
    ...:   print (n) 
    ...:  
ACEDBL 
ACEDPO 
ADBL 
AHPC 
ALDBL 
ALDBLP 
ALICL 
ALICLP 
APEX 
APEXPO 
API 
ARDBL 
ARDBLP 
ARUN 
ARUNPO 
AVU 
BARUN 
BBBLNP 
.......................... 

Um die Optionen zu erhalten, in denen die Werte eingegeben werden, wählen Sie die ID StockSymbol_Select2 gibt es mehr als eine select.form-control so müssen Sie genau, welche man angeben:

import requests 
from bs4 import BeautifulSoup 

r = requests.get("http://www.nepalstock.com.np/marketdepthofcompany/238") 
soup = BeautifulSoup(r.content,"lxml") 
value_select = soup.select_one("#StockSymbol_Select2") 
for val in value_select.select("option + option"): 
    print (val["value"]) 

, dass Sie, was Sie wollen:

In [13]: value_select = soup.select_one("#StockSymbol_Select2") 

In [14]: for val in value_select.select("option + option"): 
    ....:   print (val["value"]) 
    ....:  
216 
294 
397 
360 
406 
660 
385 
599 
262 
666 
697 
.............................. 
+0

Versuchte noch funktioniert beides nicht. das html folgt dieser Struktur und druckt nur die AECDBL, während ich 216 will. – mad

+0

Ich lief den Code und beide funktionierten gut, so dass Sie etwas falsch machen müssen –

+0

Sorry, wenn ich die Frage falsch. Das HTML folgt der folgenden Struktur. Daraus möchte ich die "216" nicht ACEDBL extrahieren. – mad