私はpythonでクローラフレームワーク「scrapy」を使用して、私はこれを行うためにfile.TheコードにJSON形式で私の項目を保存するためにpipelines.pyファイルを使用するには 輸入JSONクローラーは2回実行すると重複を生成しますか?
class AYpiPipeline(object):
def __init__(self):
self.file = open("a11ypi_dict.json","ab+")
# this method is called to process an item after it has been scraped.
def process_item(self, item, spider):
d = {}
i = 0
# Here we are iterating over the scraped items and creating a dictionary of dictionaries.
try:
while i<len(item["foruri"]):
d.setdefault(item["foruri"][i],{}).setdefault(item["rec"][i],{})[item["foruri_id"][i]] = item['thisurl'] + ":" + item["thisid"][i]
i+=1
except IndexError:
print "Index out of range"
# Writing it to a file
json.dump(d,self.file)
return item
以下に示します。問題は、クローラを2回実行してファイルをコピーしたときに、重複したアイテムを取得したときです。最初にファイルから読み込み、書き込まれる新しいデータとデータを一致させることでデータを保護しましたが、ファイルがjson形式であるため、json.loads()関数でデコードしましたが、動作しません。
これを行う方法を提案してください。
注:私は
私は、解決策は、スクリプトの複数のインスタンスが同時に実行されないようにすることだと思います。このためにファイルロックを使用することができます(スクリプト内または外部で、flockのようなユーティリティを使用します)。 複数のクローラインスタンスの理由は何ですか? – Gregory