2014-06-11 43 views
1

我有一個從這個網址點擊每個搜索結果之一:硒的Python - 搜索的訪問下一個網頁的結果

Search Guidelines

我首先從顯示的文本提取結果的總數,這樣我可以設定上限爲迭代

upperlimit=driver.find_element_by_id("total_results") 
number = int(upperlimit.text.split(' ')[0]) 

環路然後defiend作爲 對於i在範圍(1,號碼):

然而,在經歷了第一頁上的前10個結果之後,列表索引超出範圍(可能是因爲沒有更多的點擊鏈接)。我需要點擊「下一步」才能獲得下一個10個結果,依此類推,直到完成所有搜索結果。我怎樣才能做到這一點?

任何幫助,將不勝感激!

回答

1

問題是,頁面加載後,ID爲total_results的元素的值發生了變化,首先它包含117,然後更改爲44

相反,這裏是一個更強大的方法。

from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 

driver = webdriver.Firefox() 
url = 'http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true#/search/?searchText=bevacizumab&mode=&staticTitle=false&SEARCHTYPE_all2=true&SEARCHTYPE_all1=&SEARCHTYPE=GUIDANCE&TOPICLVL0_all2=true&TOPICLVL0_all1=&HIDEFILTER=TOPICLVL1&HIDEFILTER=TOPICLVL2&TREATMENTS_all2=true&TREATMENTS_all1=&GUIDANCETYPE_all2=true&GUIDANCETYPE_all1=&STATUS_all2=true&STATUS_all1=&HIDEFILTER=EGAPREFERENCE&HIDEFILTER=TOPICLVL3&DATEFILTER_ALL=ALL&DATEFILTER_PREV=ALL&custom_date_from=&custom_date_to=11-06-2014&PAGINATIONURL=%2FSearch.do%3FsearchText%40%40bevacizumab%26newsearch%40%40true%26page%40%40&SORTORDER=BESTMATCH' 
driver.get(url) 

page_number = 1 
while True: 
    try: 
     link = driver.find_element_by_link_text(str(page_number)) 
    except NoSuchElementException: 
     break 
    link.click() 
    print driver.current_url 
    page_number += 1 

基本上,這裏的想法是讓下一個頁面鏈接,直到有沒有這樣的(NoSuchElementException將會被拋出):它通過網頁,直到有沒有更多的頁面留下處理頁面。請注意,它適用於任意數量的頁面和結果。

它打印:

http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=1 
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=2#showfilter 
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=3#showfilter 
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=4#showfilter 
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=5#showfilter 
+0

噢,這是一個很好的工作。但是我需要在其中添加其他功能。如果我有任何問題,我可以回覆你嗎? – user3691767

+0

@ user3691767當然,如果您需要進一步的幫助,請考慮創建單獨的SO問題。此外,如果解決此問題,請考慮接受您認爲應得的答案。謝謝。 – alecxe

+0

你剛剛讓我的一天@alecxe我正要花費整晚思考如何解決這個問題。我現在可以遍歷每個搜索結果並獲取所需的數據。太感謝了!!!! – user3691767

0

甚至沒有需要編程壓在Next按鈕,如果你看到carrefully,網址瀏覽其他結果頁面時,只需要一個新的參數:

url = "http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page={}#showfilter" 

for i in range(1,5): 
    driver.get(url.format(i)) 

    upperlimit=driver.find_element_by_id("total_results") 
    number = int(upperlimit.text.split(' ')[0]) 

如果你仍然想以編程方式按在下一個按鈕,你可以使用:

driver.find_element_by_class_name('next').click() 

但我沒有測試過。

+0

對於每個我搜索關鍵字,結果的數目而變化。從您提供的代碼中,將範圍設置爲5不會對其他關鍵字執行訣竅嗎? – user3691767

+0

我能做的就是把這樣一個異常:除了IndexError: driver.find_element_by_class_name(「next」)。click()....但是這部分只在第一次到達頁面的末尾時才運行,然後它只是繼續點擊下一個,而我想再次開始整個事情。 – user3691767

+0

@ user3691767我只展示了一個關於你的問題的例子,點擊下一個按鈕,當然處理結果頁面是不同的。 alecxe展示了一種做法。 – PepperoniPizza