选择正确的URL以记录刮刀

时间:2018-03-07 15:52:07

标签: python scrapy

This website需要登录才能访问我想要抓取的信息。 我用scrapy shell检查时,我的选择器工作正常。但我认为我错过了登录部分的一些内容,因为当我运行我的脚本时,我无法访问该信息。

这是我的剧本:

class StartupsSpider(scrapy.Spider):
    name = "alloweb"

   login_page = 'http://www.alloweb.org/annuaire-startups/referencer-une-entreprise/'
   start_urls = ['http://www.alloweb.org/annuaire-startups/annuaire-start-ups/']



   def init_request(self):
       yield Request(url=self.login_page, callback=self.login)

   def login(self, response):
       return scrapy.FormRequest.from_response(
                response,
                formxpath=FORM_SELECTOR,
                formdata={'login': 'xxx', 'password': 'xxx'},
                callback=self.parse,
                )


   def parse(self, response):        
       for startups in response.xpath(SET_SELECTOR):


           for company_link in response.xpath(COMPANY_SELECTOR).extract():
               yield scrapy.Request(
                   format(company_link.strip("/")),
                   meta={'cookiejar':company_link},
                   callback=self.parse_company_profile,
               )


        next_page = startups.css(NEXT_PAGE_SELECTOR).extract_first()
        if next_page:
            yield scrapy.Request(
                response.urljoin(next_page),
                meta={'cookiejar': response.meta['cookiejar']},
                callback=self.parse,
            )

   def parse_company_profile(self, response):
       for startups in response.xpath(SET_SELECTOR2):

         yield {
            'name': startups.xpath(NAME_SELECTOR).extract_first(),
            'description': startups.xpath(DESCR_SELECTOR).extract_first(),
            'website':startups.xpath(WEBSITE_SELECTOR).extract_first(),
            'socialmedia':startups.xpath(SM_SELECTOR).extract(),
            'creator':startups.xpath(CREATOR_SELECTOR).extract(),
            'hub':startups.xpath(HUB_SELECTOR).extract_first(),
            'phone':startups.xpath(PHONE_SELECTOR).extract(),
            'email':startups.xpath(EMAIL_SELECTOR).extract(),   
        }

1 个答案:

答案 0 :(得分:1)

您的登录代码根本没有执行。
init_request()方法仅供Scrapy的InitSpider使用(在文档中似乎没有提及)。

class itself已有详细记录,因此您无法创建有效的蜘蛛。

由于InitSpider实际上做得不多,另一种可能性是使用登录网址作为起始网址重写您的蜘蛛,并自行创建所需的请求序列。