web-scraping - 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/>
解决方案
您收到此错误是因为您收到了一个空响应 ( 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
标准的细节在这里。
推荐阅读
- c# - C# WPF MVVMLight 从文本框中的数据网格中获取选定项
- c# - EfCore 3.1.3 为 OrderBy 抛出 Execption
- r - R在一个时间序列中删除多个季节性
- mysql - 每个工厂的前 10 名高产量
- ios - TableViewCell 中的 TableView 与 RxSwift 绑定
- r - 使用 ggplot2 和 grid.arrange 均衡多图图中的面板高度
- c++ - std::cout 内的三元条件运算符
- python - 根据Python中的索引列表从位数组中提取位?
- javascript - Outlook 加载项中是否有取消会议功能,例如发送时
- python - 为什么 TensorFlow 2.1 不能识别我的 GPU?