2017-03-28 9 views
-1

Python 프레임 워크 Scrapy는 잘 작동하지만 런타임에 스파이더를 구성하는 방법을 알 수 없습니다. 모든 구성이 나에게 "정적으로"만들어 져야한다고 생각합니다. 지독한 디자인 또는 나는 무엇인가 놓쳤다?Python Scrapy - 스크래퍼를 구성하는 일반적인 방법

예를 들어 어려운 초기화 루틴이 필요한 스파이더가 있습니다. 크롤링 용 HTTP 헤더 (쿠키, 사용자 에이전트 등)를 얻기 위해 자체 스크립트를 사용합니다. 로그인 한 사용자였습니다. 1 분에서 2 분 정도 소요됩니다. 그런 다음이 헤더를 모든 요청에 ​​적용해야합니다.

지금 나는 __init__ 거미의 방법에서 이것을한다. 하지만 거미의 생성자에서 User-Agent을 설정할 수는 없습니다. custom_settings은 클래스 변수로 설정해야합니다. 따라서 미들웨어를 사용하여 각 요청에 대해 사용자 에이전트를 설정해야합니다. 이것은 추한 솔루션입니다.

초기화 스파이더에 공통 패턴이 있습니까 - 어떤 종류의 spider factory? 이 같은 매끄러운 :

class SpiderConfigurator: 

    def __init__(): 
     ... 


    def configureSpider(spider, environment): 
     ... 
     spider.setMyCustomSettings(arg1, arg2) 
     ... 
     environment.setMyCustomSettings(argName1, argValue1) 
     environment.setMyCustomSettings('User-Agent', 'my value') 
+0

당신이하고있는 일과 그 대신에하고 싶은 일에 대한 짧은 코드 예를 제공 할 수 있습니까? – pvg

+1

[스크립트에서 치료 프로그램 실행] (https://docs.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script)에 체크 했습니까? –

+0

@paultrmbrth 네, 이것이 내가 필요한 것 같습니다! 고맙습니다 –

답변

0

Scrapy 스크립트에서 크롤링 lounch 할 수 있습니다 :이 힌트

에 대한 @paultrmbrth하는 Run Scrapy from script 감사하지만 우리는 거미를 초기화하기 수 없다 - 우리는 단지 다음 Crawler 인스턴스와 크롤러 거미 클래스를 통과 객체를 인스턴스화합니다. 우리가 할 수있는 일은 거미의 생성자에 대한 매개 변수를 전달하는 것입니다. 이 같은 매끄러운 :

os.chdir(scrapyDir) 
projectSettings = get_project_settings() 
crawlerProcess = CrawlerProcess(projectSettings) 
crawlerProcess.crawl(SpiderCls, 
        argumentName1=argumentValue1, 
        argumentName2=argumentValue2) 

인수 argumentName1argumentName2가 spider`s 생성자에 전달됩니다.