【发布时间】:2017-03-26 22:14:53
【问题描述】:
我正在尝试执行以下操作:从页面中获取一些信息,然后将其插入 mongodb。有一个页面列表,我想要多处理,因为这些页面可能需要一些时间来加载。一旦 webdriver 返回我想要插入到数据库中的结果。我面临的问题是我在数据库中只得到了我期望的结果的 1/4,所以我想象我管理结果的方式和插入不起作用。我希望有人能告诉我我哪里出错了。以下是代码示例:
from multiprocessing.dummy import Pool
from multiprocessing import cpu_count
from selenium import webdriver
import timeit
from pymongo import MongoClient
def mp_worker(urls):
driver = webdriver.Chrome(chromedriver,
chrome_options=options)
url = "http://website"+urls
driver.get(url)
return what_you_want
driver.quit() #do I do this here, close or quit?
def mp_handler():
urls= ["14360705","4584061","13788961","6877217","13194596","13400479","9868014","8524704","16394198","16315464"]
client = MongoClient()
db = client.test
collection = db['test-collection']
p = Pool(cpu_count()*2)
for result in p.imap(mp_worker, urls):
db.restaurants.update(result,{"upsert":"True"})
if __name__=='__main__':
start = timeit.default_timer()
mp_handler()
stop = timeit.default_timer()
print (stop - start)
【问题讨论】:
-
您是否检查过您正在抓取的所有页面都返回数据?可能只有 1/4 的人实际上会返回任何东西。
-
是的,如果我用 for 循环按顺序抓取它,我会得到完整的结果
标签: python mongodb selenium pymongo