gpt4 book ai didi

python - 从 Python 脚本内部运行 scrapy - CSV 导出器不起作用

转载 作者:太空狗 更新时间:2023-10-30 00:17:42 27 4
gpt4 key购买 nike

当我从命令行运行它时,我的抓取器工作正常,但是当我尝试从 python 脚本中运行它时(使用概述的方法 here 使用 Twisted)它不会输出它通常的两个 CSV 文件做。我有一个创建和填充这些文件的管道,其中一个使用 CsvItemExporter(),另一个使用 writeCsvFile()。这是代码:

class CsvExportPipeline(object):

def __init__(self):
self.files = {}

@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline

def spider_opened(self, spider):
nodes = open('%s_nodes.csv' % spider.name, 'w+b')
self.files[spider] = nodes
self.exporter1 = CsvItemExporter(nodes, fields_to_export=['url','name','screenshot'])
self.exporter1.start_exporting()

self.edges = []
self.edges.append(['Source','Target','Type','ID','Label','Weight'])
self.num = 1

def spider_closed(self, spider):
self.exporter1.finish_exporting()
file = self.files.pop(spider)
file.close()

writeCsvFile(getcwd()+r'\edges.csv', self.edges)

def process_item(self, item, spider):
self.exporter1.export_item(item)

for url in item['links']:
self.edges.append([item['url'],url,'Directed',self.num,'',1])
self.num += 1
return item

这是我的文件结构:

SiteCrawler/      # the CSVs are normally created in this folder
runspider.py # this is the script that runs the scraper
scrapy.cfg
SiteCrawler/
__init__.py
items.py
pipelines.py
screenshooter.py
settings.py
spiders/
__init__.py
myfuncs.py
sitecrawler_spider.py

爬虫似乎在所有其他方面都正常运行。命令行末尾的输出表明已抓取了预期数量的页面,蜘蛛程序似乎已正常完成。我没有收到任何错误消息。

---- 编辑: ----

将打印语句和语法错误插入到管道中没有任何效果,因此管道似乎被忽略了。为什么会这样?

这里是运行爬虫脚本的代码(runspider.py):

from twisted.internet import reactor

from scrapy import log, signals
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy.xlib.pydispatch import dispatcher
import logging

from SiteCrawler.spiders.sitecrawler_spider import MySpider

def stop_reactor():
reactor.stop()

dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = MySpider()
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start(loglevel=logging.DEBUG)
log.msg('Running reactor...')
reactor.run() # the script will block here until the spider is closed
log.msg('Reactor stopped.')

最佳答案

将“from scrapy.settings import Settings”替换为“from scrapy.utils.project import get_project_settings as Settings”解决了这个问题。

找到解决方案here .没有提供解决方案的解释。

alecxe已提供an example如何从 Python 脚本中运行 Scrapy。

编辑:

更详细地阅读了 alecxe 的帖子后,我现在可以看出“from scrapy.settings import Settings”和“from scrapy.utils.project import get_project_settings as Settings”之间的区别。后者允许您使用项目的设置文件,而不是默认设置文件。阅读 alecxe 的帖子(链接到上面)了解更多详细信息。

关于python - 从 Python 脚本内部运行 scrapy - CSV 导出器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com