Scrapy 在 1G 内存的环境下是不是无法发挥工作呢?尝试了三次,在运行一段时间(一小时以上)之后就是遇到 OOM。 可能代码逻辑有问题?
# 从一个入口站点入手,获取全部的 a 标签。再然后循环。
for url in response.xpath('//a/@href').extract():
# 存取 title 之类
yield item
yield scrapy.Request(url,callback=self.parse, dont_filter=True)
谢谢指导
import scrapy
import re
import urlparse
import socket
import datetime
import logging
import tldextract
from domain_spider.items import DomainSpiderItem
DOMAINS= []
DBD_DOMAINS = ['youtube.com', 'tumblr.com', 'facebook.com','google.com', 'twitter.com', 'yahoo.com','apple.com']
def get_domain(url):
domain = urlparse.urlparse(url).netloc
return domain
def items(item,domain, ip):
item['domain'] = domain
item['date'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return item
class TestSpider(scrapy.Spider):
name = "Test"
start_urls = [
'https://xxx.com/',
]
def parse(self, response):
item = DomainSpiderItem()
try:
for url in response.xpath('//a/@href').extract():
if re.match('^http',url):
for x in DBD_DOMAINS :
if x in url:
break
else:
domain = get_domain(url)
ip = domain_get_ip(get_domain(url))
items(item, domain, ip)
yield item
yield scrapy.Request(url,callback=self.parse, dont_filter=True)
except Exception as error:
logging.log(logging.WARNING,error)
1
whwq2012 2017-06-19 12:19:48 +08:00 via Android
我在我的阿里云 1g 内存的服务器上跑过半个月都没有问题
|
3
VicYu 2017-06-19 12:32:15 +08:00
报错看看
|
4
linkbg OP @VicYu 没有错误。直接被 kill 了。/var/log/message 中记录 OOM kill
|
8
whwq2012 2017-06-19 13:15:22 +08:00 via Android
scrapy 的日志看了吗,没有的话就设置成 debug 级别的,再运行一次,期间你可以去 scrapy 的 github 项目,搜搜有没有 issue 出现过和你一样的问题。
|
9
linkbg OP @whwq2012 谢谢啦,
日志方面除了在插入到数据库时会报唯一限制的错误,没有其他关于 scrapy 的报错,最后一次,我盯着它在我眼皮底下直接就被 kill 掉。 /var/log/message 中的记录 ``` kernel: Out of memory: Kill process 2454 (scrapy) score 333 or sacrifice child kernel: Killed process 2454 (scrapy) total-vm:999536kB, anon-rss:346860kB, file-rss:1176kB, shmem-rss:0kB ``` |
10
VicYu 2017-06-19 13:38:59 +08:00
|
11
VicYu 2017-06-19 13:40:17 +08:00
|
12
awanabe 2017-06-19 13:40:54 +08:00
用 yield 就是迭代器, 之前的对象都不会释放的。
|
14
mansur 2017-06-19 13:52:37 +08:00
ps aux | grep python
运行一阵后看下有几个 py 进程 |