使用scrapy将刮擦物品保存到JSON/CSV/XML文件



我正在学习官方文档中学习报纸(网络爬行框架)。
通过以下示例和文档,我创建了我的蜘蛛来使用SiteMap

刮擦数据
from scrapy.contrib.spiders import SitemapSpider
from scrapy.selector import Selector
from MyProject1.items import MyProject1Item
class MySpider(SitemapSpider):
    name="myspider"
    sitemap_urls = ['http://www.somesite.com/sitemap.xml']
    sitemap_follow = ['/sitemapbrowsesectiond+']
    count=0
    def parse(self, response):
        self.count=self.count+1
        item=MyProject1Item()
        sel=Selector(response)
        item["exp"]=sel.xpath('/html/head/title/text()').extract()
        print str(self.count)+":t"+response.url
        print sel.xpath('/html/head/title/text()').extract()
        print "nn"

我可以通过运行命令在屏幕上看到屏幕上的刮擦结果
scrapy crawl myspider
我可以通过在命令中添加选项
将刮擦结果保存到JSON/CSV/XML文件 scrapy crawl myspider -o item.json -t json用于在JSON文件中获取结果。

我的问题是,刮擦结果将结果刮擦到项目中。意味着必须等到爬行。因此,对于大型项目,我将不得不等待很长时间,因为我猜这些爬网都将在json文件中写下结果。

我希望纸巾及时或几乎迅速或爬行中的json文件写信,这样我就可以看到在签证运行时爬行的网站的结果。

我知道我无法捕捉到的零食中构建的东西。我试图从http://doc.scrapy.org/en/latest/topics/feed-exports.html
获得帮助。和
http://doc.scrapy.org/en/latest/topics/exporters.html
但无法解决我的问题。因此,我正在寻找一些帮助或示例代码,否则我必须在parse(self, response)函数中添加几行才能创建JSON/CSV文件并在其中写入取消结果。

这是写入文件的方式。只有在盘时才会写入一个缓冲区。

例如,在一个外壳中,用python打开文件:

$ ipython
In [1]: fp = open('myfile', 'w')

在另一个外壳中监视文件内容:

$ tail -f myfile

回到python shell并写一些内容:

In [2]: _ = [fp.write("This is my file contentn") for i in range(100)]

就我而言,我在tail输出中没有看到任何内容。写更多内容:

In [3]: _ = [fp.write("This is my file contentn") for i in range(100)]

现在我看到了tail输出中的行。

实际上,您可以更改文件缓冲(请参阅[1])。再次打开文件:

$ ipython
In [1]: fp = open('myfile', 'w', buffering=0)

监视另一个外壳中的文件内容:

$ tail -f myfile

写点东西,然后查看tail输出:

In [2]: fp.write("Hello theren")

启用缓冲是一件好事(减少磁盘I/O)。您的项目文件最终将获得输出,但是您可能需要将格式更改为默认的jsonlines(无需-t参数),并且您每行都会获得JSON对象。这是用于流媒体的高度使用格式。

您可以轻松读取jsonlines.jl扩展):

import json
for line in open('items.jl'):
    data = json.loads(line)
    # do stuff with data

甚至其他工具,例如head json.tooljq(请参阅[2]):

$ head -1 items.jl | python -m json.tool
$ jq -I . items.jl

到目前为止,我还没有看到任何问题,将项目写入.jl文件(或任何其他格式)。但是,如果您的工作被杀死,您将丢失缓冲区中的最后一件物品。可以通过将项目存储在DB或类似的内容中来解决。

[1] http://docs.python.org/2/library/functions.html#open

[2] http://stedolan.github.io/jq/manual/

scrapy crawl myspider -o item.json -t json在仅爬行时保存了取出的结果。我不必等待爬行才能完成。我可以看到文件item.json的内容。

因此,无需包括编写获取数据以在蜘蛛中提交的代码。

相关内容

  • 没有找到相关文章