私は、セレンを使ったスクラップミキシングを使用しています。 並列処理で多くのタスクで自分の解析関数を実行したいと思います。私は同時に多くの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()
それはエラーを得ました)。 私を助けてください。ありがとう!
問題は解析関数htmlresponseオブジェクトを引数として受け取るので、ここでは変数はhtmlresponse型ではありません。それを避ける方法? –