python - Scrapy存在内存泄漏的问题。
问题描述
再编写爬虫的时候,总是跑了一段时间(不会超过12个小时)就会被OOM掉。很是无奈!!!根据官方的文档, 使用这个prefs()但是实在找不出问题的所在。
Live ReferencesHtmlResponse 42 oldest: 753s agoMySuteSpider1 oldest: 2964s agoRequest 32412 oldest: 2920s agoSelector 42 oldest: 751s agoTripItem 37 oldest: 751s ago
爬虫的处理是获取所有页面的a标签的链接:
#获取域名的后缀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’# 获取域名所在的国家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)
请指教一下谢谢
问题解答
回答1:yield item 是不是得落地,存文件或者db,不然一直存内存了
相关文章:
1. html5 - 百度echart官网下载的地图json数据乱码2. node.js - 关于你不知道的JavaScript上一书介绍的行为委托3. java - svn导下来的项目,web-inf下怎么没有lib文件呀?4. 这是什么情况???5. 统计 - MYSQL版本问题导致SQL语法错误!unknow column ’SQLSTR’6. Python的os.listdir在获取文件列表时的顺序问题7. 如何用笔记本上的apache做微信开发的服务器8. python - Pycharm的Debug用不了9. javascript - 这是什么插件能把能把cli里面的webpack打包信息格式化?10. javascript - Vue.js2.0不能使用debounce后大伙一般是如何解决延迟请求的问题的呢。
