read_csv在scrapy的parse中读出来为空
时间: 2023-09-03 09:05:56 浏览: 79
在Scrapy的`parse`方法中使用`read_csv`读取文件时,可能会出现读取为空的情况。这可能是因为`parse`方法是异步执行的,而`read_csv`是同步执行的。在`parse`方法中,如果使用`read_csv`读取文件,可能会在`read_csv`执行之前就返回了空数据,因此需要使用异步方式读取文件。
你可以使用`twisted`包提供的`deferToThread`方法,将`read_csv`方法放到一个线程中执行。具体步骤如下:
1. 在`parse`方法中使用`deferToThread`方法调用`read_csv`方法,如下所示:
```
from twisted.internet.threads import deferToThread
import pandas as pd
def parse(self, response):
file_path = 'your_file_path'
deferred = deferToThread(pd.read_csv, file_path)
deferred.addCallback(self.parse_csv)
return deferred
```
2. 定义`parse_csv`方法来处理读取到的数据,如下所示:
```
def parse_csv(self, data):
# 在这里处理读取到的数据,可以使用pandas等库进行数据处理
pass
```
这样,就可以在`parse`方法中异步地读取CSV文件并处理数据了。注意,在使用`deferToThread`方法时,需要将`read_csv`方法和参数一起传递给它,同时需要使用`addCallback`方法来指定读取完成后的回调函数。
阅读全文