在Scrapy处理完每个URL之后,如何存储累积的数据?

2024-09-29 20:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在Scrapy完成工作后(即它完成了我问他的每个URL之后)存储一些数据。 每次粗略地解析一些结果(通过spider类中的parse函数),我都会将一些信息附加到类本身中现有的全局对象中。我希望在最后访问该对象,如果可能的话,可以从Python脚本执行所有操作。这是我的蜘蛛代码:

from scrapy.spider import Spider
from scrapy.selector import Selector
from nltk.corpus import stopwords


from newsScrapy.items import NewsscrapyItem

class newsScrapySpider(Spider):
    name = "newsScrapy"
    start_urls = []

    global wordMatrix
    wordMatrix = {}

    global prefix
    prefix = "http://www.nytimes.com/indexes/"
    sufix = "/todayspaper/index.html"
    for year in range (2000,2015):
        for month in range (1,13):
            for day in range (1,32):
                if(month<10 and day<10):
                    start_urls.append (prefix+str(year)+"/"+"0"+str(month)+"/"+"0"+str(day))
                elif (month<10 and day>9):
                    start_urls.append (prefix+str(year)+"/"+"0"+str(month)+"/"+str(day))
                elif (month>9 and day<10):
                    start_urls.append (prefix+str(year)+"/"+str(month)+"/"+"0"+str(day))
                else:
                    start_urls.append (prefix+str(year)+"/"+str(month)+"/"+str(day))

    def parse(self, response):
        sel = Selector(response)
        items = []
        text = sel.xpath('//body//text()').re('(\w+)')

        item = NewsscrapyItem()

        item['body'] = text
        item['date'] = response.url.strip(prefix)

        items.append(item)

        for word in item['body']:
            word = word.strip(' ').strip(',').strip('\n')
            word = word.lower()
            if (not word in stopwords.words('english')):
                if(wordMatrix.__contains__((word, item['date']))):
                    wordMatrix[word,item['date']]+=1
                else:
                    wordMatrix[word, item['date']]=1


        # print wordMatrix
        return items

我们的想法是在抓取结束后访问wordMatrix变量(一旦收集到每个数据),然后从另一个Python脚本执行此操作(用于每个示例的绘图)。 谢谢!在


Tags: infromimportprefixitemsitemurlsyear
1条回答
网友
1楼 · 发布于 2024-09-29 20:15:51

加上您现有的进口产品:

try:
    import cPickle as pickle
except ImportError:
    import pickle

然后在return items之前:

^{pr2}$

在另一个脚本中,可以使用以下命令加载此数据:

try:
    import cPickle as pickle
except ImportError:
    import pickle

wordMatrix = pickle.load('/path/to/file/wordMatrix.data')

Pickling是序列化和反序列化任何Python对象的过程。Python标准库中有两个实现-pickle是纯Python,cPickle是用C编写的,因此速度更快。不寻常的导入代码试图导入速度更快的一个,但例如IronPython缺少cPickle,在本例中,后者被导入。两个模块的功能完全相同,并且共享相同的接口。在

相关问题 更多 >

    热门问题