scrapy框架:login-scrape-navigate

时间:2012-07-17 04:58:50

标签: scrapy

如何进行表单登录,然后使用scrapy处理该会话?

例如考虑一个具有登录身份验证的网站,它有三个与登录会话链接的不同页面。 因此,使用scrapy,首先登录然后在主页中搜索一些,然后按照主页中的特定链接,点击链接并从该页面中删除。然后再回到主页,再按照其他链接等等。 我有一个文件ccbank_spider.py,下面是内容

class LoginSpider(BaseSpider):

 #some code

 #for hitting and parsing of the Account URL
 for accountURL in (strip(s) for itemArr in items for s in itemArr['accountURL']):
    print accountURL
    yield request(accountURL, callback=self.account_transactions)

 def account_transactions(self, response):
  print 'print text'
  return None

我收到以下错误

          File "D:\NextGen\workspace\tutorial\tutorial\spiders\ccbank_spider.py", line       45, in after_login
       yield request(accountURL, callback=self.account_transactions)
   exceptions.TypeError: 'module' object is not callable

1 个答案:

答案 0 :(得分:0)

这是关于您的第一个问题(登录)的文档:

class LoginSpider(BaseSpider):
    name = 'example.com'
    start_urls = ['http://www.example.com/users/login.php']

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

    def after_login(self, response):
        # check login succeed before going on
        if "authentication failed" in response.body:
            self.log("Login failed", level=log.ERROR)
            return

        # continue scraping with authenticated session...

至于你问题的其他部分,你可以抓取你想要的所有链接,也可以填写主页,并为每个新请求做:

request = Request(url_to_scrape, callback=self.parse_item)
    request.meta['language'] = "eng"
    yield request

然后你在这个exaxmple中解析parse_item中的那个页面,你也可以发送元信息给你。