0

広告を含むページへのリンクが多数あるページをスクレイピングしようとしています。ナビゲートするために現在行っていることは、広告のリストを含む最初のページに移動し、個々の広告のリンクを取得することです。その後、データベースからデータを取得して、リンクをスクレイピングしていないことを確認します。以下のコードは、基本的にすべての 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

前もって感謝します。

4

1 に答える 1