2016-04-05 3 views
1

以下のhtmlのスニペットの中から(データ全体を切り捨てて) 'data-pages'の値を返したいと思います。python - web scraping - クラス内から属性を返す

<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> 
私はBeautifulSoupを使用しています

、そして私のコード版画「なし」私はsoup.findを使用しようとするたびに()

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

誰かが私が間違っているの何を見せてもらえますか?クラスからこの値を取得する正しい方法は?

また、サイト全体で「データページ」のすべての値を返すようにこれを拡張したい場合、これはどのように行われますか?

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

ありがとうございます!

+0

HTMLまたはページのソースを取得するにはどうすればよいのページ –

答えて

0
あなたはタグから属性を抽出する必要が

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

select.catalogPagination_dropdownはとページ全体にわたるすべての選択のタグを検索しますcatalogPagination_dropdownクラスの場合、必要な属性を持つデータページ属性を抽出するだけで済みます。

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]) 

あなたの例のHTMLでの選択と同じになりますどの:

また、いくつかはそれを持っていない場合にはdata-current属性を持つタグを見つけるだけに"data-pages": Trueを使用して、find_all使用することができますそれは私が追加されたデータ・ページの代わりに、fooでの選択を無視:

['97'] 
0

大きなHTMLスニペットを添付した方が良いでしょう。タグの名前は、あなたがsoup.find(..)の属性を変更する必要があり、あなたは、属性値を取得したい場合、あなたは[「データ・ページを」]添付する必要がありselectある場合

これを試してみてください:

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

へのリンクの多くを追加しますか?ソースを印刷して、このタグがソースにあるかどうかを確認してください。動的に生成することもできますし、クラスcatalogPagination ....で複数のタグを選択することもできます。最初にデータページ属性が含まれていない場合は、Noneを取得します。 Padraicの答えを確認してください。 –