2016-04-18 7 views
1

スパイダーを作成するためにscrapyを使用しているときにresponse.xpath()メソッドがメモリをリークしていました。ここでのコードは次のとおりです。私はコメント行をコメント解除するときscrapy response.xpath()によりメモリリークが発生する

def extract_data(self, response): 
    aomen_host_water = None 
    aomen_pankou = None 
    aomen_guest_water = None 
    sb_host_water = None 
    sb_pankou = None 
    sb_guest_water = None 


    # response.xpath('//div[@id="webmain"]/table[@id="odds"]/tr') 
    # for tr in all_trs: 
    #  # cname(company name) 
    #  cname = tr.xpath('td[1]/text()').extract() 
    #  if len(cname) == 0: 
    #   continue 
    #  # remove extra space and other stuff 
    #  cname = cname[0].split(' ')[0] 
    #  if cname == u'澳彩': 
    #   aomen_host_water = tr.xpath('td[9]/text()').extract() 
    #   if len(aomen_host_water) != 0: 
    #    aomen_pankou = tr.xpath('td[10]/text()').extract() 
    #    aomen_guest_water = tr.xpath('td[11]/text()').extract() 
    #   else: 
    #    aomen_host_water = tr.xpath('td[6]/text()').extract() 
    #    aomen_pankou = tr.xpath('td[7]/text()').extract() 
    #    aomen_guest_water = tr.xpath('td[8]/text()').extract() 
    #  elif cname == u'SB': 
    #   sb_host_water = tr.xpath('td[9]/text()').extract() 
    #   if len(sb_host_water) != 0: 
    #    sb_pankou = tr.xpath('td[10]/text()').extract() 
    #    sb_guest_water = tr.xpath('td[11]/text()').extract() 
    #   else: 
    #    sb_host_water = tr.xpath('td[6]/text()').extract() 
    #    sb_pankou = tr.xpath('td[7]/text()').extract() 
    #    sb_guest_water = tr.xpath('td[8]/text()').extract() 
    # if (aomen_host_water is None) or (aomen_pankou is None) or (aomen_guest_water is None) or \ 
    #   (sb_host_water is None) or (sb_pankou is None) or (sb_guest_water is None): 
    #  return None 
    # if (len(aomen_host_water) == 0) or (len(aomen_pankou) == 0) or (len(aomen_guest_water) == 0) or \ 
    #   (len(sb_host_water) == 0) or (len(sb_pankou) == 0) or (len(sb_guest_water) == 0): 
    #  return None 
    # item = YPItem() 
    # item['aomen_host_water'] = float(aomen_host_water[0]) 
    # item['aomen_pankou'] = aomen_pankou[0].encode('utf-8') # float(pankou.pankou2num(aomen_pankou[0])) 
    # item['aomen_guest_water'] = float(aomen_guest_water[0]) 
    # item['sb_host_water'] = float(sb_host_water[0]) 
    # item['sb_pankou'] = sb_pankou[0].encode('utf-8') # float(pankou.pankou2num(sb_pankou[0])) 
    # item['sb_guest_water'] = float(sb_guest_water[0]) 

    item = YPItem() 
    item['aomen_host_water'] = 1.0 
    item['aomen_pankou'] = '111' # float(pankou.pankou2num(aomen_pankou[0])) 
    item['aomen_guest_water'] = 1.0 
    item['sb_host_water'] = 1.0 
    item['sb_pankou'] = '111' # float(pankou.pankou2num(sb_pankou[0])) 
    item['sb_guest_water'] = 1.0 
    return item 

ここで私はクモが100 + Mメモリとメモリ使用量が継続的に上昇し使用し、有用な文をコメントして偽のデータを使用し、45Mのメモリについて使用クモ。誰かがこれまでにこのような問題に遭遇しましたか?

答えて

0

extract()の代わりにextract_first()に切り替えると、不要なリストが作成される可能性があります。

私はまた、最新バージョンにscrapylxmlをアップグレードします:

pip install --upgrade scrapy 
pip install --upgrade lxml 
+0

私はちょうど最初の行のコメントを解除しようとした、蜘蛛のメモリ使用量は依然として高く、大丈夫連続 – bob

+0

@bobを上昇し、それは、チェックしてくださいました更新。 – alecxe

+0

どうもありがとうございます – bob

関連する問題