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(),
}
答案 0 :(得分:1)
您的登录代码根本没有执行。
init_request()
方法仅供Scrapy的InitSpider
使用(在文档中似乎没有提及)。
class itself已有详细记录,因此您无法创建有效的蜘蛛。
由于InitSpider
实际上做得不多,另一种可能性是使用登录网址作为起始网址重写您的蜘蛛,并自行创建所需的请求序列。