Scale을 사용하여 Nameko 종속 공급자로 샘플 웹 크롤러를 만들었지 만 어떤 페이지도 크롤링하지 않습니다. 다음은 코드입니다.스킨 Nameko DependencyProvider가 페이지를 크롤링하지 않음
import scrapy
from scrapy import crawler
from nameko import extensions
from twisted.internet import reactor
class TestSpider(scrapy.Spider):
name = 'test_spider'
result = None
def parse(self, response):
TestSpider.result = {
'heading': response.css('h1::text').extract_first()
}
class ScrapyDependency(extensions.DependencyProvider):
def get_dependency(self, worker_ctx):
return self
def crawl(self, spider=None):
spider = TestSpider()
spider.name = 'test_spider'
spider.start_urls = ['http://www.example.com']
self.runner = crawler.CrawlerRunner()
self.runner.crawl(spider)
d = self.runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()
return spider.result
def run(self):
if not reactor.running:
reactor.run()
그리고 여기에 로그가 있습니다.
로그에서
Closing spider (finished)
Dumping Scrapy stats:
{'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 9, 3, 12, 41, 40, 126088),
'log_count/INFO': 7,
'memusage/max': 59650048,
'memusage/startup': 59650048,
'start_time': datetime.datetime(2017, 9, 3, 12, 41, 40, 97747)}
Spider closed (finished)
우리가 한 페이지를 크롤링 할 것으로 예상 한 페이지를 크롤링하지 않았다 그것을 볼 수
Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.corestats.CoreStats']
Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
Enabled item pipelines:
[]
Spider opened
.
반면에 일반 CrawlerRunner
을 만들고 페이지를 크롤링하면 예상 결과가 {'heading': 'Example Domain'}
으로 되돌아옵니다. 아래는 코드입니다
import scrapy
class TestSpider(scrapy.Spider):
name = 'test_spider'
start_urls = ['http://www.example.com']
result = None
def parse(self, response):
TestSpider.result = {'heading': response.css('h1::text').extract_first()}
def crawl():
runner = crawler.CrawlerRunner()
runner.crawl(TestSpider)
d = runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()
if __name__ == '__main__':
crawl()
. 내가 잘못 가고있는 곳을 바로 잡아주세요.
이걸로 무엇을 성취하려고합니까? 구현을 현재의 상태로 두십시오. 실제 요구 사항은 무엇입니까? –
나는 nameko 서비스에 대한 의존성으로 이것을 원한다. 이는 nameko 마이크로 서비스 프레임 워크가 요청 (웹 스크래핑 요청)을 처리하고 결과를 반환하기 위해'ScrapyDependency(). crawl()'을 호출 할 것임을 의미한다. 문제는이 방법으로 페이지를 긁어 모으지 않는 것입니다. –
네임코와 트위스트 서버를 섞어서 섞어서 젤이 얼마나 잘 자르지는 못했습니다. –