python - Scrapy存在內(nèi)存泄漏的問(wèn)題。
問(wèn)題描述
再編寫爬蟲的時(shí)候,總是跑了一段時(shí)間(不會(huì)超過(guò)12個(gè)小時(shí))就會(huì)被OOM掉。很是無(wú)奈!!!根據(jù)官方的文檔, 使用這個(gè)prefs()但是實(shí)在找不出問(wèn)題的所在。
Live ReferencesHtmlResponse 42 oldest: 753s agoMySuteSpider1 oldest: 2964s agoRequest 32412 oldest: 2920s agoSelector 42 oldest: 751s agoTripItem 37 oldest: 751s ago
爬蟲的處理是獲取所有頁(yè)面的a標(biāo)簽的鏈接:
#獲取域名的后綴def get_domain_suffix(domain): if ’com’ in tldextract.extract(domain).suffix:return True return False#拼接域名。只存主域名def save_domain(domain): domain_name = tldextract.extract(domain).domain suffix_name = tldextract.extract(domain).suffix return domain_name + ’.’ + suffix_name#獲取域名ipdef get_domain_ip(domain): try:ip = socket.gethostbyname(domain)return ip except:return ’114.114.114.114’# 獲取域名所在的國(guó)家def get_domain_ct_iso(ip): GEO = geoip2.database.Reader(’/var/test/geodb/GeoLite2-City.mmdb’) r = GEO.city(ip) return r.country.iso_codeclass MyDomainSpider(scrapy.Spider): name = ’my_domain’ start_urls = [’http://xxx.com ] def parse_items(self, response):item = TripItem()for url in response.xpath(’//a/@href’).extract(): if url.startswith(’http’): domain = urlparse.urlparse(url).netloc if get_domain_tw(domain) or get_domain_ct_iso(get_domain_ip(domain)) == ’US’:item[’domain’] = save_domain(domain)item[’ip’] = get_domain_ip(domain)item[’datetime’] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')yield item def parse(self, response):for url in response.xpath(’//a/@href’).extract(): if url.startswith(’http’):domain = urlparse.urlparse(url).netlocif get_domain_tw(domain) or get_domain_ct_iso(get_domain_ip(domain)) == ’US’: yield scrapy.Request(url, callback=self.parse_items)
請(qǐng)指教一下謝謝
問(wèn)題解答
回答1:yield item 是不是得落地,存文件或者db,不然一直存內(nèi)存了
相關(guān)文章:
1. 數(shù)組按鍵值封裝!2. docker不顯示端口映射呢?3. java - 阿里的開發(fā)手冊(cè)中為什么禁用map來(lái)作為查詢的接受類?4. 問(wèn)題:javaBean對(duì)象如何指定部分屬性 然后轉(zhuǎn)為json字符串5. html5 - 使用echarts中的圖表 一個(gè)頁(yè)面導(dǎo)入了好幾個(gè)js圖表 實(shí)現(xiàn)echarts圖表隨著瀏覽器窗口變化而變化時(shí)出現(xiàn)了問(wèn)題6. clone - git sourceTree克隆倉(cāng)庫(kù)時(shí),都不停彈出Password Required彈窗,即時(shí)輸入正確的git賬號(hào)密碼還是彈出7. javascript - 使用vue官方腳手架進(jìn)行單元測(cè)試,如何覆蓋到watch里的變量?8. python - 如何找第三方編譯好的模塊?9. javascript - webpack中alias配置中的“@”是什么意思?10. javascript - 為什么創(chuàng)建多行多列的表格最后只有一行內(nèi)有表格
