我试着在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脚本执行此操作(用于每个示例的绘图)。 谢谢!在
加上您现有的进口产品:
然后在
^{pr2}$return items
之前:在另一个脚本中,可以使用以下命令加载此数据:
Pickling
是序列化和反序列化任何Python对象的过程。Python标准库中有两个实现-pickle
是纯Python,cPickle
是用C编写的,因此速度更快。不寻常的导入代码试图导入速度更快的一个,但例如IronPython缺少cPickle,在本例中,后者被导入。两个模块的功能完全相同,并且共享相同的接口。在相关问题 更多 >
编程相关推荐