python - 使用 Scrapy 解析本地 XML 文件:DOWNLOAD_TIMEOUT & DOWNLOAD_MAXSIZE 不起作用
问题描述
我正在使用 Scrapy 解析本地 XML 文件,并且代码似乎挂在一个特定的 XML 文件上。
文件可能太大(219M)或格式错误?无论哪种方式,蜘蛛都不会崩溃,它只会冻结。冻得太厉害了,我什至不能ctrl + c出来......
我已经尝试调整DOWNLOAD_TIMEOUT
和DOWNLOAD_MAXSIZE
设置来让scrapy跳过这个文件,以及它遇到的任何其他类似的有问题的文件,但它似乎不起作用。至少如果我file:///Users/.../myfile.xml
用作 URL,我是根据这篇文章做的。
如果我改为python -m http.server 8002
使用该 URL ( ) 启动服务器并访问文件,http://localhost:8002/.../myfile.xml
那么 Scrapy 会跳过带有 cancelledError 的文件,就像我想要的那样:expected response size larger than download max size
.
所以我猜如果您使用文件协议,则不使用下载器设置,因为您实际上并没有下载任何东西?类似的东西?有没有办法告诉scrapy超时/跳过本地文件?
似乎启动一个 http 服务器是一种解决方案,但它增加了运行蜘蛛的复杂性(并且可能会减慢速度?)所以我宁愿找到一个不同的解决方案。
解决方案
我相当肯定这一点,DOWNLOAD_TIMEOUT
并且DOWNLOAD_MAXSIZE
仅在通过 HTTP 或其他网络协议进行调用时才起作用。相反,您可以覆盖start_requests
可以更好地控制读取文件方式的方法:
def start_requests(self, **kwargs):
for uri in self.uris:
...
例如,您可以使用os.read
with 提供_length
参数,该参数将告诉 Python 读取文件,直到读取了_length
字节数,然后返回。这可能与您使用DOWNLOAD_MAXSIZE
.
推荐阅读
- macos - 即使在调整权限后运行“mvn clean install”时反复出现“无法从...复制完整内容”
- ag-grid - ag-grid 的 agSelectCellEditor 无法正确渲染单元格
- javascript - Bootbox alert doesn't show up in Laravel view
- android - 如何从 SoapObject 中删除属性?
- javascript - 从列选项获取调用表
- python - 使用脚本参数在 Snakemake 中指定 Python 版本
- sql - 表上的选择性删除权限可能吗?
- ruby - rails:查找外键日期在一定范围内的模型对象
- python - 对象没有附加到文件 python 的属性“writerow”
- dart - 在 Firebase 控制台中看不到颤振屏幕类