使用 Scrapy 解析本地 XML 文件:DOWNLOAD_TIMEOUT & DOWNLOAD_MAXSIZE 不工作
Parsing local XML files with Scrapy: DOWNLOAD_TIMEOUT & DOWNLOAD_MAXSIZE not working
我正在用 Scrapy 解析本地 XML 文件,代码似乎挂在一个特定的 XML 文件上。
文件可能太大 (219M) 或格式不正确?无论哪种方式,蜘蛛都不会崩溃,它只会冻结。它冻结得如此糟糕,我什至无法按 ctrl+c 退出...
我已经尝试调整 DOWNLOAD_TIMEOUT
和 DOWNLOAD_MAXSIZE
设置以跳过这个文件,以及它遇到的任何其他类似问题的文件,但它似乎不起作用。至少如果我使用 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 timeout/skip?
似乎启动一个 http 服务器是一个解决方案,但它增加了 运行 蜘蛛的复杂性(并且可能会减慢速度?)所以我宁愿找到一个不同的解决方案。
我相当确定 DOWNLOAD_TIMEOUT
和 DOWNLOAD_MAXSIZE
仅在通过 HTTP 或其他网络协议进行调用时有效。相反,您可以重写 start_requests
方法,这样您可以更好地控制读取文件的方式:
def start_requests(self, **kwargs):
for uri in self.uris:
...
例如,您可以使用 os.read
并提供 _length
参数,该参数将告诉 Python 读取文件,直到读取了 _length
字节数,然后 return。这可能会产生与使用 DOWNLOAD_MAXSIZE
.
相同的效果
我正在用 Scrapy 解析本地 XML 文件,代码似乎挂在一个特定的 XML 文件上。
文件可能太大 (219M) 或格式不正确?无论哪种方式,蜘蛛都不会崩溃,它只会冻结。它冻结得如此糟糕,我什至无法按 ctrl+c 退出...
我已经尝试调整 DOWNLOAD_TIMEOUT
和 DOWNLOAD_MAXSIZE
设置以跳过这个文件,以及它遇到的任何其他类似问题的文件,但它似乎不起作用。至少如果我使用 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 timeout/skip?
似乎启动一个 http 服务器是一个解决方案,但它增加了 运行 蜘蛛的复杂性(并且可能会减慢速度?)所以我宁愿找到一个不同的解决方案。
我相当确定 DOWNLOAD_TIMEOUT
和 DOWNLOAD_MAXSIZE
仅在通过 HTTP 或其他网络协议进行调用时有效。相反,您可以重写 start_requests
方法,这样您可以更好地控制读取文件的方式:
def start_requests(self, **kwargs):
for uri in self.uris:
...
例如,您可以使用 os.read
并提供 _length
参数,该参数将告诉 Python 读取文件,直到读取了 _length
字节数,然后 return。这可能会产生与使用 DOWNLOAD_MAXSIZE
.