gpt4 book ai didi

python - 运行并行解析函数 python scrapy

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:21 26 4
gpt4 key购买 nike

我正在使用 scrapy 与 Selenium 混合。我想在许多任务中并行运行我的解析函数。我想同时打开多个网址。所以我使用 Pool.map 函数将 parse() 函数映射到数组(1,2,3)。但尴尬的是我的函数是由 scrapy 的 HttpResponse 对象传递的,所以它无法通过 Pool.map() 函数传递 i 参数。我将我的 map() 函数放在我的蜘蛛类中或之外。但我不知道如何完成。

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()

出现错误:

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'

如果我在我的蜘蛛类中使用池而不是创建新的 Facebook 蜘蛛实例,则会出现错误 TypeError: parse() 恰好需要 2 个参数(给定 1 个参数)。请帮我。谢谢!

最佳答案

其中一个问题与您创建 FacebookSpider 实例有关。实际上,您并没有创建 FacebookSpider 实例并尝试访问 parse 成员方法。

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

关于python - 运行并行解析函数 python scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com