광고가 포함 된 페이지로 연결되는 링크가 많은 페이지를 긁어 내려고합니다. 현재 광고를 탐색하고 개별 광고에 대한 링크를 얻는 첫 페이지로 이동합니다. 그 후, 나는 데이터베이스에서 데이터를 가져 와서 링크를 긁어 내지 않았는지 확인합니다. 아래의 코드는 기본적으로 모든 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
미리 감사드립니다.
나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 표시하는 코드가 올바르게 작동하지 않습니까? 그렇다면 어떻게? 예외가 발생 했습니까 아니면 올바른 결과를 산출하지 못하고 있습니까? 아니면 효과가 있습니까?하지만 어떤면에서는 더 좋을 수 있다고 생각하십니까? 귀하의 질문이 무엇인지에 대해 구체적으로 말씀해주십시오. 귀하의 코드와 해당 내용에 대한 설명만으로는 충분하지 않습니다. – Blckknght
죄송합니다. 코드가 작동하지 않습니다. 마지막 코드 블록의 마지막 줄에서 StopIteration 예외가 발생합니다. – h3y4w