0

我正在使用 goose-extractor 从字典键中解析 url 列表。我正在使用 python 2.7.6 我的代码如下:

import json
import re
import sys
from goose import Goose
from pymongo import MongoClient
mongoobj = MongoClient()
coll = mongoobj.db_name.coll_name
gobj = Goose()
eachkey = sys.argv[1]
print "\n "+eachkey
all_data = []
total_data = len(json_data[eachkey])
count = 0.0
for each_link in json_data[eachkey]:
    print "\r",str(round(count/total_data,2)),
    count += 1
    try:
        data = gobj.extract(each_link)
        new_data =" ".join( re.findall(r"\b\w+\b",data.cleaned_text))
        text = ""
        if new_data:
             text = new_data
        elif data.meta_description:
             text = " ".join(re.findall(r"\b\w+\b", data.title + " " + data.meta_description))
        if text:
            coll.insert_one({"text":text, "label":eachkey, "title":data.title})
    except Exception as e:
        print e

Goose 似乎正在 tmp 中创建一个名为 goose/ 的文件夹,它正在用 tmp 文件填充它,并且它已经填满了我的系统空间。我不希望这让我的系统崩溃。我做错了什么,垃圾收集没有正确发生。

4

1 回答 1

0

Goose 在可以从中提取内容之前将数据临时存储在本地存储中,我不知道有任何爬虫可以在不使用一定数量的本地存储的情况下在旅途中有效地执行此操作,

本地存储路径可以从文件中配置configuration.py as self.local_storage_path =。也在那个文件集中self.debug =False避免进一步加载。

在鹅完成后使用release_resources()评论中建议的功能,它看起来像这样

def relase_resources(self):
        path = os.path.join(self.config.local_storage_path, '%s_*' % self.article.link_hash)
        for fname in glob.glob(path):
            try:
                os.remove(fname)
            except OSError:
                # TODO better log handling
                pass

并清除临时资源。

通常,即使是几百个中级源的 tmp 文件也不足以使系统崩溃。

于 2019-01-15T06:45:39.293 回答