Scrapy에서 셀레늄의 사용

1. 셀레늄 scrapy의 방법에 사용

  • 생성자 크롤러 재정의 파일, 그 과정에서 인스턴스화하는 브라우저 객체를 사용 셀레늄 (브라우저가 한 번만 객체를 인스턴스화하기 때문에)

  • 다시 쓰기 파충류 파일 내부에서 객체 (자기 스파이더)에있어서, 근접 브라우저를 닫았다. 이 방법은 파충류의 끝에서 호출

  • 가로 탬퍼 응답 데이터에 응답하여 객체의 메소드가 페이지에 저장하므로, 다운로드 미들웨어 process_response 방법 다시 쓰기

  • 구성 파일에 다운로드 한 미들웨어를 엽니 다

2. 코드 쇼

- 파충류 파일 :

WangyiSpider 클래스 (RedisSpider) : 
     이름 = 'wangyi' 
     #allowed_domains = [ 'www.xxxx.com'] 
     start_urls = [ 'https://news.163.com']이 
     는 def __init __ (자동) : 
         브라우저의 # 인스턴스 객체 (인스턴스 번) 
         self.bro = webdriver.Chrome (executable_path = '/ Users (사용자) / 보보 / 데스크탑 / chromedriver') 
     # 전체 크롤러의 끝에 있어야 가까이 브라우저 
     DEF 폐쇄 (자체, 스파이더) : 
         인쇄 ( ' 파충류 ') 끝 
         ) (self.bro.quit를

IMG이동 클릭하고 드래그

- 미들웨어 파일 :

오기 HtmlResponse scrapy.http에서     
     # 파라미터 도입 : 
     #는 (스파이더 응답 다운 객체에 송신된다) 응답 객체를 인터셉트 
     #request : 요청 객체는 응답의 오브젝트에 대응 
     #response : 인터셉트 된 응답 오브젝트 
     #spider을 : 파일 대응 러 파충류의 예 
     DEF process_response (자기, 요청, 응답 , 거미) 
         오브젝트에 저장 탬퍼 응답 # 페이지 데이터 
         경우 http://news.163.com/domestic/','http:/ '[에서 request.url /news.163.com/world/','http://news.163.com/air/','http://war.163.com/ '] : 
             spider.bro.get (URL = 요청. URL) 
             JS = '는 window.scrollTo (0, document.body.scrollHeight)' 
             spider.bro.execute_script (JS) 
             time.sleep (2) # 소정 시간 데이터로드 브라우저 특정 버퍼 수득 
             # 페이지 데이터는 이 페이지 데이터에 해당하는 뉴스 데이터 중 동적 로딩을 포함
             page_text = spider.bro.page_source의page_source 
             # 탬퍼 응답 객체
             창 HtmlResponse (URL = spider.bro.current_url 바디 = page_text 코딩 = "UTF-8", 요청 = 요청) 
         다른 : 
             반환 응답

IMG이동 클릭하고 드래그

- 프로필 :

DOWNLOADER_MIDDLEWARES = { 
     'wangyiPro.middlewares.WangyiproDownloaderMiddleware': 543, 
 }

추천

출처www.cnblogs.com/yzg-14/p/12207872.html