Selenium Python - 访问搜索结果的下一页
我需要从这个网址中逐个点击每个搜索结果:
我首先从显示的文本中提取结果的总数,这样我就可以设定一个循环的上限。
upperlimit=driver.find_element_by_id("total_results")
number = int(upperlimit.text.split(' ')[0])
然后我定义了一个循环,像这样:
for i in range(1,number):
但是,在浏览完第一页的前10个结果后,列表索引超出了范围(可能是因为没有更多的链接可以点击)。我需要点击“下一页”才能获取接下来的10个结果,依此类推,直到所有搜索结果都处理完。请问我该怎么做呢?
任何帮助都将不胜感激!
2 个回答
0
其实你根本不需要通过代码去点击下一页
按钮。如果你仔细观察一下,网址只需要加一个新的参数,就能浏览其他结果页面:
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()
不过我还没有测试过这个。
2
问题在于,页面加载后,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