広告を含むページへのリンクが多数あるページをスクレイピングしようとしています。ナビゲートするために現在行っていることは、広告のリストを含む最初のページに移動し、個々の広告のリンクを取得することです。その後、データベースからデータを取得して、リンクをスクレイピングしていないことを確認します。以下のコードは、基本的にすべての href 属性を取得し、それらをリストとして結合します。その後、すでにスクレイピングしたページのデータベースに保存したリンクのリストと照合します。したがって、基本的には、まだスクレイピングしていないリンクのリストが返されます。
@staticmethod
def _scrape_home_urls(driver):
home_url_list = list(home_tab.find_element_by_tag_name('a').get_attribute('href') for home_tab in driver.find_elements_by_css_selector('div[class^="nhs_HomeResItem clearfix"]'))
return (home_url for home_url in home_url_list if home_url not in(url[0] for url in NewHomeSource.outputDB()))
そのページのすべてのリンクをスクレイピングすると、次のページに移動します。_scrape_home_urls() を再度呼び出して再利用しようとしました
NewHomeSource.unique_home_list = NewHomeSource._scrape_home_urls(driver)
for x in xrange(0,limit):
try:
home_url = NewHomeSource.unique_home_list.next()
except StopIteration:
page_num = int(NewHomeSource.current_url[NewHomeSource.current_url.rfind('-')+1:]) + 1 #extract page number from url and gets next page by adding 1. example: /.../.../page-3
page_url = NewHomeSource.current_url[:NewHomeSource.current_url.rfind('-')+1] + str(page_num)
print page_url
driver.get(page_url)
NewHomeSource.current_url = driver.current_url
NewHomeSource.unique_home_list = NewHomeSource._scrape_home_urls(driver)
home_url = NewHomeSource.unique_home_list.next()
#and then I use the home_url to do some processing within the loop
前もって感謝します。