2016-04-18 13 views
1

Ich fand response.xpath() Methode undichte Speicher während der Verwendung von scrapy, um eine Spinne zu schreiben. hier ist der Code:scrapy response.xpath() verursacht Speicherverlust

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 

hier i die nützlichen Aussagen kommentiert und verwendet gefälschte Daten, Spinne über 45M Speicher verwendet, wenn ich die kommentierten Zeilen unkommentiert, Spinne verwendet, um 100 + M-Speicher und die Speicherauslastung kontinuierlich ansteigt. Hat jemand diese Art von Problem schon einmal getroffen?

Antwort

0

Sie können die Speichernutzung verringern, indem Sie statt extract() zu extract_first() wechseln, wodurch unnötige Listen erstellt werden.

Ich würde auch scrapy und lxml auf die neuesten Versionen aktualisieren:

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

i gerade versucht, die erste Zeile Kommentar-, die Speichernutzung der Spinne ist immer noch hoch und steigt kontinuierlich – bob

+0

@bob okay, es bekam, überprüfen Sie bitte, das Update. – alecxe

+0

danke irgendeinen weg – bob

Verwandte Themen