2016-04-05 20 views
1

'Veri sayfaları' değerini, html snippet'inin içinden (bir sayfanın tamamından kesilerek) döndürmek istiyorum.python - web kazıma - dönüş özellikleri bir sınıfın içinden dönme

<div class="catalogPagination" data-js-component="catalog-pagination/catalog-pagination"> 
    <span class="catalogPagination_button catalogPagination_button-prev catalogPagination_button-disabled"> 
    </span> 
    <div class="catalogPagination_label"> 
    <select class="catalogPagination_dropdown" data-baseurl="/herrenbekleidung-shirts/?order=popularity" data-current="1" data-pages="97"> 
     <option> 
     Seite 1 von 97 
     </option> 
    </select> 
Ben BeautifulSoup kullanıyorum

ve benim kod baskılar 'Hiçbiri' ı soup.find kullanmayı deneyin her()

s = soup.find('data-pages', attrs={'class': 'catalogPagination_dropdown'}) 
print s 

birisi yanlış yapıyorum bana gösterir misin? ve bu değeri sınıftan almanın doğru yolu?

Ayrıca, tüm site genelinde 'veri sayfalarının' tüm değerlerini döndürmek için bunu genişletmek istesem, bu nasıl yapılır?

s = soup.find_all(.....) ? 

Teşekkürler!

+0

html veya sayfa kaynağını nasıl alabilirim sayfa –

cevap

0

print([s["data-pages"] for s in soup.select("select.catalogPagination_dropdown") if s.has_attr("data-pages")]) 

select.catalogPagination_dropdown ile tüm sayfa boyunca tüm seçkin etiketlerini bulacaksınız:

Sen etiketinden niteliğini ayıklamak gerekiyor catalogPagination_dropdown sınıfından sonra, istediğimiz özniteliğe sahipse, veri sayfaları özniteliğini çıkarmanız yeterlidir.

Ayrıca sadece durumunda data-current özelliği olan etiketlerini bulmak için "data-pages": True kullanarak find_all kullanabileceğiniz bazı bu yok:

html = """ <div class="catalogPagination" data-js-component="catalog-pagination/catalog-pagination"> 
    <span class="catalogPagination_button catalogPagination_button-prev catalogPagination_button-disabled"> 
    </span> 
    <div class="catalogPagination_label"> 
    <select class="catalogPagination_dropdown" data-baseurl="/herrenbekleidung-shirts/?order=popularity" data-current="1" data-pages="97"> 
     <select class="catalogPagination_dropdown" data-baseurl="/herrenbekleidung-shirts/?order=popularity" data-current="1" foo="97"> 

     <option> 
     Seite 1 von 97 
     </option> 
    </select>""" 

soup = BeautifulSoup(html) 


selects = soup.find_all("select", {"class": "catalogPagination_dropdown", "data-pages": True}) 

print([s["data-pages"] for s in selects]) 

senin örneğin html ile size seçkin aynı verecek Hangi

['97'] 
0

Daha büyük html snippet'i eklediyseniz daha iyi olur. etiketinin name sen soup.find(..) yılında özelliklerini değiştirmek zorunda ve nitelikleri değeri elde etmek istiyorsanız, [ 'veri sayfalarını'] takmak zorunda select ise

bu deneyin:

s = soup.find('select', attrs={'class': 'catalogPagination_dropdown'})['data-pages'] 
print s 
+0

yönlendiren bir bağlantının daha ekleyin: ama ben katma veri sayfaları yerine foo ile seçme görmezden? Kaynağı yazdırmaya çalışın ve bu etiketi kaynakta kontrol edin. Dinamik olarak oluşturulabilir veya sınıf catalogPagination .... ile birden fazla seçim etiketi olabilir, bu yüzden ilkini alır. İlki veri sayfaları özelliği içermiyorsa, Hiçbiri almazsınız. Padraic'in cevabını kontrol et. –