我的Spider需要继续登录网站以进行长时间爬网:
start_urls = ['https://example.com/login']
crawl_urls = ["www.example.com/page1",
"www.example.com/page2",
"www.example.com/page1000"]
def parse(self, response):
token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()
return [scrapy.FormRequest.from_response(response,
formdata={'csrf_token': token,
'password': 'mypassword',
'username': 'myusername'},
formcss='.login_form_widget .form',
callback=self.check_login_response)]
def check_login_response(self, response):
if b"Incorrect username or password" in response.body:
self.log("Login failed", level=logging.ERROR)
return
else:
self.log("Successfully logged in!!")
for url in self.crawl_urls:
yield scrapy.Request(url=url, callback=self.scrape)
def scrape(self, response):
# scraping
yield item
问题是页面上的某些数据仅在登录时可见。因此,我的Spider可以在登录时抓取这些数据。但是有些记录缺少这些数据,我发现Scrapy会对这些页面进行了爬网未登录时。
我正在考虑检查响应页面的HTML是否包含我的username
,然后登录。
在我的代码中,我应该让Scrapy自己检查一下是否已登录,如果没有,请执行登录?