2016-11-02 14 views
1

私は、セレンを使ったスクラップミキシングを使用しています。 並列処理で多くのタスクで自分の解析関数を実行したいと思います。私は同時に多くのURLを開きたい。だから私は配列(1,2,3)に私のparse()関数をマップするPool.map関数を使用します。しかし、恥ずかしいことは、私の関数は、HttpResponseオブジェクトによってscrapyによって渡されるため、Pool.map()関数による引数を渡せませんでした。私はmap()関数を自分のスパイダークラスに入れてしまった。しかし、私はどのように完了するか分からない。私が代わりに新しいFacebookのクモのインスタンスを作成する私のクモクラスでプールを使用する場合は、エラーTypeError例外ましパラレル解析機能を実行するpython scrap

Traceback (most recent call last): 
File "C:\Users\warrior\AppData\Local\Enthought\Canopy\User\lib\site- packages\twisted\internet\defer.py", line 588, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "D:\mega folder\webcrawler\tutorial\tutorial\spiders\facebook_spider -  Copy (3).py", line 56, in parse 
for target in self.original_usr.find().limit(3).skip(i*3): 
TypeError: unsupported operand type(s) for *: 'HtmlResponse' and 'int' 

::(パース)は、正確に2つの引数を取ります(1与えられた

class FacebookSpider(scrapy.Spider): 
    name = 'facebk' 
    start_urls = ['https://www.facebook.com'] 
    options = Options() 
    options.add_argument("--disable-notifications") 
    client = MongoClient() 
    db = client.test 
    original_usr = db.user 

    def parse(self,i): 
     driver = webdriver.Chrome(chrome_options=self.options) 
     self.logger.info("executing") 
     pickle.dump(self.driver.get_cookies() , open("cookies.pkl","wb")) 
     try: 
     for target in self.original_usr.find().limit(3).skip(i*3): 
      self.logger.info("email:"+target['email']) 
      url = "https://www.facebook.com/search/people/?  q="+target['email'] 
      self.driver.get(url) 
      cookies = pickle.load(open("cookies.pkl", "rb")) 
      for cookie in cookies: 
       self.driver.add_cookie(cookie) 
      self.parse_pages(url) 
     finally: 
     driver.close() 

if __name__ == '__main__':   
    target_nums= range(2) 
    pool = ThreadPool(2) 
    fs = FacebookSpider() 
    pool.map(fs.parse,target_nums) 
    pool.close() 
    pool.join() 

それはエラーを得ました)。 私を助けてください。ありがとう!

+0

問題は解析関数htmlresponseオブジェクトを引数として受け取るので、ここでは変数はhtmlresponse型ではありません。それを避ける方法? –

答えて

1

1つの問題は、FacebookSpiderのインスタンスを作成していることです。実際には、FacebookSpiderインスタンスを作成せず、解析メンバーメソッドにアクセスしようとしています。

if __name__ == '__main__':   
    target_nums= range(2) 
    pool = ThreadPool(2) 
    fs = FacebookSpider() 
    pool.map(fs.parse,target_nums) 
    pool.close() 
    pool.join() 
+0

こんにちは、私は()を使用しても、それはまだ同じです –

+0

あなたは変更を加えた後、エラーが変更されましたか?さらに、問題の詳細情報を得るためには、例外スタック全体を質問に含める必要があります。 –

+0

はい。私はそれを再編集しました –

関連する問題