2016-03-25 3 views
0

Pythonスクリプト内でScrapyを実行しようとしています。ここでは、関連するコードは次のとおりです。コードはPythonスクリプトの引数を受け入れることができません

import scrapy 
from scrapy.crawler import CrawlerProcess 

class PostSpider(scrapy.Spider): 
    name = "post crawler" 
    allowed_domains = ['test.com'] 

    def __init__(self, **kwargs): 
     super(PostSpider, self).__init__(**kwargs) 

     url = kwargs.get('url') 
     print(url) 
     self.start_urls = ['https://www.test.com/wp-json/test/2.0/posts' + url] 

    def parse(self, response): 
     post = json.loads(response.body_as_unicode()) 
     post = post["content"] 
     return post 

posts = GA.retrieve(TIA.start_date, TIA.end_date, "content type auto") 

process = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

for post in posts: 
    post_url = post[2] 
    process.crawl(PostSpider(url=post_url)) 
    process.start() 

私はややガイドラインherehereに従うことをしようとしています。しかし、私はそれを働かせることはできません。受信したエラーメッセージは次のとおりです。

Unhandled error in Deferred: 
2016-03-25 20:49:43 [twisted] CRITICAL: Unhandled error in Deferred: 


Traceback (most recent call last): 
    File "text_analysis.py", line 48, in <module> 
    process.crawl(PostSpider(url=post_url)) 
    File "/Users/terence/TIA/lib/python3.5/site-packages/scrapy/crawler.py", line 163, in crawl 
    return self._crawl(crawler, *args, **kwargs) 
    File "/Users/terence/TIA/lib/python3.5/site-packages/scrapy/crawler.py", line 167, in _crawl 
    d = crawler.crawl(*args, **kwargs) 
    File "/Users/terence/TIA/lib/python3.5/site-packages/twisted/internet/defer.py", line 1274, in unwindGenerator 
    return _inlineCallbacks(None, gen, Deferred()) 
--- <exception caught here> --- 
    File "/Users/terence/TIA/lib/python3.5/site-packages/twisted/internet/defer.py", line 1128, in _inlineCallbacks 
    result = g.send(result) 
    File "/Users/terence/TIA/lib/python3.5/site-packages/scrapy/crawler.py", line 71, in crawl 
    self.spider = self._create_spider(*args, **kwargs) 
    File "/Users/terence/TIA/lib/python3.5/site-packages/scrapy/crawler.py", line 94, in _create_spider 
    return self.spidercls.from_crawler(self, *args, **kwargs) 
    File "/Users/terence/TIA/lib/python3.5/site-packages/scrapy/spiders/__init__.py", line 50, in from_crawler 
    spider = cls(*args, **kwargs) 
    File "text_analysis.py", line 17, in __init__ 
    self.start_urls = ['https://www.techinasia.com/wp-json/techinasia/2.0/posts' + url] 
builtins.TypeError: Can't convert 'NoneType' object to str implicitly 
2016-03-25 20:49:43 [twisted] CRITICAL: 
/xiaomi-still-got-it-bitches 
2016-03-25 20:49:43 [scrapy] INFO: Enabled extensions: 
['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.logstats.LogStats'] 

私は何が間違っているのか分からないようです。

答えて

1

CrawlerProcess.crawlは、Spiderクラスであり、Spiderインスタンスではありません。

次のような引数を渡す必要があります。

process.crawl(PostSpider, url=post_url) 
2

definition **は、

クロール(crawler_or_spidercls、*引数であるようprocess.crawl()の呼び出しは

process.crawl(PostSpider, url=post_url) 

でなければなりませんkwargs)

spiderクラス(インスタンス化されたオブジェクトではない)が最初の引数として必要です。次の位置とキーワードの引数(*args, **kwargs)はすべてspider init関数に渡されます。

+0

これを数時間探していました。ありがとう! –

関連する問題