2016-03-20 12 views
0

Aşağıdaki koddan tüm değer adlarını ve durum kimliklerini beautifulsoup ile seçmek istiyorum. kimseBu teftiş elemanından tüm durum bilgisi ve durum adı nasıl seçilir

<select id="stateId" class="states" name="state" required="required"> 
<option value="">Select State</option> 
<option value="Andaman and Nicobar Islands" stateid="1">Andaman and Nicobar Islands</option> 
<option value="Andhra Pradesh" stateid="2">Andhra Pradesh</option> 
<option value="Arunachal Pradesh" stateid="3">Arunachal Pradesh</option> 
<option value="Assam" stateid="4">Assam</option> 
<option value="Bihar" stateid="5">Bihar</option> 
<option value="Chandigarh" stateid="6">Chandigarh</option> 
<option value="Chhattisgarh" stateid="7">Chhattisgarh</option> 
<option value="Dadra and Nagar Haveli" stateid="8">Dadra and Nagar Haveli</option> 
<option value="Daman and Diu" stateid="9">Daman and Diu</option> 
<option value="Delhi" stateid="10">Delhi</option> 
<option value="Goa" stateid="11">Goa</option> 
<option value="Gujarat" stateid="12">Gujarat</option> 
<option value="Haryana" stateid="13">Haryana</option> 
<option value="Himachal Pradesh" stateid="14">Himachal Pradesh</option> 

cevap

0

Bunu yapmak için, ben findAll kullanarak tüm "seçeneği" unsurları dolaşılan ve onların devlet kimliği ve devlet adı var bir liste anlama tasarlanmış tüm stateid ve devlet Adını hurda BeautifulSoup senaryo yazmaya nasıl söyleyin lütfen : f ile,

>>> import bs4 
>>> bs = bs4.BeautifulSoup(<your text>) 
>>> [(x["stateid"], x["value"]) for x in bs.findAll("option") if x["value"] != ""] 
[('1', 'Andaman and Nicobar Islands'), ('2', 'Andhra Pradesh'), ('3', 'Arunachal Pradesh'), ('4', 'Assam'), ('5', 'Bihar'), ('6', 'Chandigarh'), ('7', 'Chhattisgarh'), ('8', 'Dadra and Nagar Haveli'), ('9', 'Daman and Diu'), ('10', 'Delhi'), ('11', 'Goa'), ('12', 'Gujarat'), ('13', 'Haryana'), ('14', 'Himachal Pradesh')] 

Bu dizilerini listesini döndürür:

[(x["stateid"], x["value"]) for x in bs.findAll("option") if x["value"] != ""] 

böyle liste anlama kullanılan her biri ir ve ilk olarak devlet kimliği, ikincisi ise devlet adıdır. Ayrıca başlangıçtaki boş değeri if x["value"] != "" kullanarak da atlar. resultset dilimleme ilk "boş" seçeneği atlayarak bir CSS selector ile

select = soup.find("select", id="stateId") 
options = [(option["stateid"], option["value"]) 
      for option in select.find_all("option", value=lambda x: x)] 
print(options) 

Veya:

0

OrangeFlash81 önerdi iyileştirmek için, önce "boş" seçeneğini ayıklanması önlemek için value=lambda x: x geçen find_all() kullanabilirsiniz :

options = [(option["stateid"], option["value"]) 
      for option in soup.select("#stateId option")[1:]] 
print(options) 
İlgili konular