我使用Scrapy写了一个刮刀,我有一个奇怪而简单的问题。
我使用u / p登录来抓取数据但有时网站会将我重定向到/login.asp页面,其中包含我将要抓取的网址的redir = query参数。所以我添加了re_login_if_needed()函数,我把它称为parse()回调的第一个语句。我的想法是检查response.url是否有重定向URL,以便我可以重新登录该站点并继续像以前一样使用parse()进行报废。
问题是从不执行re_login_if_needed()函数。我放在那里的任何DEBUG PRINT语句都不会打印出来。
怎么可能?
在课堂上我有:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
self.re_login_if_needed(response)
page = response.url.split("/")[-2]
filename = 'quotes-%s.html' % page
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
def re_login_if_needed(self, response):
# check if response.url contains redirect code, i.e: "/login.asp?redir="
# and relogin ...