2017-01-01 123 views
-1

我試圖提取特定鏈接,這個網站碼獲取HREF使用美麗的湯

<a class="pageNum taLnk" data-offset="10" data-page-number="1" 
href="www.blahblahblah.com/bb32123">Page 1 </a> 
<a class="pageNum taLnk" data-offset="20" data-page-number="2" 
href="www.blahblahblah.com/bb45135">Page 2 </a> 

正如你可以看到,該鏈接(HREF)是無組織的,因此沒有模式,我要使用的意味着我需要使用BeautifulSoup手動提取href。

我想具體獲得第2頁的href。

這些可以我現在的代碼。

from bs4 import BeautifulSoup 
import urllib 

url = 'https://www.tripadvisor.com/ShowUserReviews-g293917-d539542-r447460956-Duangtawan_Hotel_Chiang_Mai-Chiang_Mai.html#REVIEWS' 
page = urllib.request.urlopen(url) 
soup = BeautifulSoup(page, 'html.parser') 
for link in soup.find_all('a', attrs = {'class' : 'pageNum taLnk'}): 
    print (link) 

正如你所看到的,我停留在試圖獲得專門的HREF信息,第2頁。反正是有使用的標記,如data-page-number = "2"data-offset = "20"內的信息額外位訪問。

回答

2
page_2 = soup.find('a', attrs = {'data-page-number' : '2'}) 

這隻會讓你的頁面2,如果你想獲得下一個頁面,無論當前頁是什麼,你應該尋找下一個網頁的網址:

next_page = soup.find('a', attrs = {'class' = 'nav next rndBtn ui_button primary taLnk'}) 

一些屬性,像HTML 5中的數據 - *屬性,有 不能被用作關鍵字參數名稱名稱:

data_soup = BeautifulSoup('<div data-foo="value">foo!</div>') 
data_soup.find_all(data-foo="value") 
# SyntaxError: keyword can't be an expression 

你可以通過將它們放入一個 字典並通過字典轉爲find_all()作爲ATTRS 參數使用搜索這些屬性:

data_soup.find_all(attrs={"data-foo": "value"}) 
# [<div data-foo="value">foo!</div>] 
+0

哦..謝謝你!爲什麼我沒有想到這一點! ! –

+0

@ Niche.P我更新了代碼,並請接受答案。 –

+0

是的,我在等待計時器,還剩2分鐘。謝謝 –