使用Scrapy进行身份验证后对页面进行爬网导致DupeFilter问题

时间:2014-12-17 11:31:01

标签: scrapy web-crawler

我打算从我网站的管理面板中抓取一些数据。

它的工作方式是脚本将在 www.example.com/administration 页面登录,然后继续抓取 {{1的xpath下的所有链接 www.example.com/administration/customers 页面中的

我的代码:

//tbody

然而,当我尝试运行它时,它并没有真正起作用,并显示“不再显示重复项(请参阅DUPEFILTER_DEBUG以显示所有重复项)”

也许我的规则代码不正确或者还有其他我缺少的东西

1 个答案:

答案 0 :(得分:1)

您需要在请求中设置dont_filter=True以防止它被转储:

return FormRequest.from_response(response,
                    formdata={'employee[email]': 'xyz@example.com', 'employee[password]': 'xyz'},
                    formxpath='//form[@id="new_employee"]',
                    dont_filter=True,
                    callback=self.after_login)

这是因为您通过将formdatausernamepassword发送到您已访问过的同一页面来登录。但这一次被DUPEFILTER抛弃了。

注意:您可以在settings.py中添加以下内容,完全禁用此过滤器:

DUPEFILTER_CLASS = 'scrapy.dupefilter.BaseDupeFilter'

这会将过滤器类设置为BaseDupeFilter,根本不进行过滤。

摘自official documentation

  

dont_filter(boolean) - 表示此请求不应该是   由调度程序过滤。当您想要执行时使用此选项   多次相同的请求,忽略重复过滤器。使用   它小心翼翼,否则你会陷入爬行循环。默认为False。