2016-04-05 79 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類,那麼你只需要提取數據頁屬性,如果它具有我們想要的屬性。

您還可以使用find_all,使用"data-pages": True只找到以防data-current屬性標籤一些不具備的:

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但它忽略了與富選擇在地方的數據頁,我說:

['97'] 
0

如果您附加了更大的html代碼片段,效果會更好。

如果標籤的名字是select你有soup.find(..)改變屬性,如果你想獲得的屬性值,你必須附上[「數據頁」]

試試這個:

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

你如何獲得頁面的源代碼的鏈接嗎?嘗試打印源代碼並檢查源代碼中的此標記。它可以是動態生成的,也可以是多於一個選擇標籤的類catalogPagination ....所以它需要第一個。如果第一個不包含數據頁面屬性,則會得到None。檢查Padraic的答案。 –