首页 > 解决方案 > AttributeError:“NoneType”对象没有属性“css”。试图刮掉旧的 reddit 但收到此错误

问题描述

我试图刮掉旧的reddit,但每次我得到这个错误:

>>> response.css('div')

Traceback (most recent call last):

File "<console>", line 1, in <module>

AttributeError: 'NoneType' object has no attribute 'css'

我做错了什么还是你不能刮掉旧的reddit?

这是日志:

[scrapy.core.engine] DEBUG: Crawled (200) <GET https://old.reddit.com/robots.txt> (referer: None)
2020-11-02 14:56:09 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://old.reddit.com/> from <GET http://old.reddit.com>
2020-11-02 14:56:09 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://old.reddit.com/>

标签: web-scrapingscrapyreddit

解决方案


您收到此错误是因为您收到了一个空响应 ( None)。所以你试图.css()在一个空变量中调用该方法。您收到None而不是预期响应对象的原因是您的蜘蛛过滤了请求

您可以在执行日志的这一行中看到:

2020-11-02 14:56:09 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://old.reddit.com/>

该站点的robots.txt. 您可以通过更改蜘蛛的settings.py行来禁用此过滤器ROBOTSTXT_OBEY。要禁用它,请使用:

ROBOTSTXT_OBEY = False

这将导致您的蜘蛛忽略robots.txt所有请求。阅读更多

然而,尊重robots.txt规则被认为是网络抓取中的一种良好做法(甚至可以说是道德的)。更多关于robots.txt标准的细节在这里


推荐阅读