2013-06-11 1 views
0

Scrappy가있는 사이트에 로그인하고 다른 URL을 호출하고 싶습니다. 지금까지 너무 좋아 내가 공세를 설치하고이 스크립트를 만든 :이 스크립트를 실행 한 후Scrappy로 쿠키를 연결하고 저장하는 방법

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.http import FormRequest 

class LoginSpider2(BaseSpider): 
    name = 'github_login' 
    start_urls = ['https://github.com/login'] 

    def parse(self, response): 
     return [FormRequest.from_response(response, formdata={'login': 'username', 'password': 'password'}, callback=self.after_login)] 

    def after_login(self, response): 
     if "authentication failed" in response.body: 
      self.log("Login failed", level=log.ERROR) 
     else: 
      self.log("Login succeed", response.body) 

을, 나는 로그가 "로그인 성공"있어요. 는 그럼 난 다른 URL을 추가했지만 작동하지 않았다 : 을 위해 내가 대체하는 것이 :

start_urls = ['https://github.com/login'] 

start_urls = ['https://github.com/login', 'https://github.com/MyCompany/MyPrivateRepo'] 

에 의해 그러나 나는 이러한 오류 가지고 :

2013-06-11 22:23:40+0200 [scrapy] DEBUG: Enabled item pipelines: 
Traceback (most recent call last): 
    File "/usr/local/bin/scrapy", line 4, in <module> 
    execute() 
    File "/Library/Python/2.7/site-packages/scrapy/cmdline.py", line 131, in execute 
    _run_print_help(parser, _run_command, cmd, args, opts) 
    File "/Library/Python/2.7/site-packages/scrapy/cmdline.py", line 76, in _run_print_help 
    func(*a, **kw) 
    File "/Library/Python/2.7/site-packages/scrapy/cmdline.py", line 138, in _run_command 
    cmd.run(args, opts) 
    File "/Library/Python/2.7/site-packages/scrapy/commands/crawl.py", line 43, in run 
    spider = self.crawler.spiders.create(spname, **opts.spargs) 
    File "/Library/Python/2.7/site-packages/scrapy/spidermanager.py", line 43, in create 
    raise KeyError("Spider not found: %s" % spider_name) 

를 내가 잘못하고있는거야? I에 유래에 검색하지만 적절한 응답을 찾지 못했습니다 ..

감사합니다 당신이

답변

1

귀하의 오류가 Scrapy가 거미를 찾을 수 없음을 나타냅니다. project/spiders 폴더에 생성 했습니까?

어쨌든 일단 실행하면 두 번째 문제가 발생합니다. start_url 요청에 대한 기본 콜백은 self.parse이며 이는 repo 페이지 (로그인 양식이 없음)에서 실패합니다. 그리고 그들은 아마도 그것은 개인의 repo를 방문하는 시간에 의해, 그래서이 오류가 발생합니다 병렬로 실행됩니다 : P

을 당신은 start_urls 만 로그인 URL을두고 경우 after_login 방법에 새로운 Request를 반환해야 그것은 효과가 있었다. 이와 같이 :

def after_login(self, response): 
    ... 
    else: 
     return Request('https://github.com/MyCompany/MyPrivateRepo', 
         callback=self.parse_repo) 
0

스파이더의 이름 속성이 올바르게 설정되어 있습니까? name의 설정이 잘못되었거나 누락 된 경우 일반적으로 이와 같은 오류가 발생합니다.

관련 문제