我正在尝试使用auth系统抓取整个网站。没有我的身份验证功能,所有功能都可以正常使用。当我使用身份验证功能时,抓取登录信息并仅抓取主页。为什么不抓取“规则”部分中定义的所有链接?
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.http import Request, FormRequest
class TSpider(CrawlSpider):
name = 't'
allowed_domains = ['domain.net']
start_urls = ['http:// domain.net/']
login_page = 'http:// domain.net/login.php'
rules = (
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
def start_requests(self):
yield Request(url=self.login_page, callback=self.login, dont_filter=True)
def login(self, response):
return FormRequest.from_response(response,
formdata={'login_username': 'login',
'login_password': 'password'},
callback=self.parse_item)
def parse_item(self, response):
item = {}
item['title'] = response.xpath('//head/title/text()').extract()
item['url'] = response.url
return item
答案 0 :(得分:0)
我有一个线索。我只是在登录功能中摆脱了回调,一切正常。但是有人向我解释吗?
def login(self, response):
return FormRequest.from_response(response,
formdata={'login_username': 'login',
'login_password': 'password'},
)
答案 1 :(得分:0)
规则仅适用于默认回调parse()
处理的响应。
将self.parse_item
替换为self.parse
,或省略参数,因为parse()
是默认回调。