我有两只蜘蛛。假设A和B。A刮取一堆URL并将其写入csv文件,B刮取这些URL中的内容,读取A生成的csv文件。但在A实际创建文件之前,B抛出FileNotFound错误。我怎样才能使我的爬行器的行为使B等待A返回url?任何其他解决方案都会有所帮助
WriteToCsv.py文件
def write_to_csv(item):
with open('urls.csv', 'a', newline='') as csvfile:
fieldnames = ['url']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'url': item})
class WriteToCsv(object):
def process_item(self, item, spider):
if item['url']:
write_to_csv("http://pypi.org" +item["url"])
return item
Pipelines.py文件
ITEM_PIPELINES = {
'PyPi.WriteToCsv.WriteToCsv': 100,
'PyPi.pipelines.PypiPipeline': 300,
}
读取csv方法
def read_csv():
x = []
with open('urls.csv', 'r') as csvFile:
reader = csv.reader(csvFile)
for row in reader:
x = [''.join(url) for url in reader]
return x
在B spider文件中启动\u URL
start_urls = read_csv() #Error here
我会考虑使用两种方法的单个蜘蛛{{CD1>}和^ {< CD2}}。据我所知,从您提供的上下文来看,没有必要将URL写入磁盘
parse
应该包含用于抓取爬行器A当前正在写入csv的URL的逻辑,并且应该返回一个新请求,并回调final_parse
方法final_parse
应该包含以前在spider B中的解析逻辑注意:如果需要将任何附加信息从
parse
传递到final_parse
,可以使用scrapy.Request
的meta
参数如果您确实需要URL,可以将其作为字段添加到项目中。 它可以通过
response.url
访问相关问题 更多 >
编程相关推荐