webscraping中的多处理线程

2024-04-23 10:04:29 发布

您现在位置:Python中文网/ 问答频道 /正文

在我以前的代码版本中,我使用for循环执行web抓取,并将数据块添加到字典中。现在,我希望使用multiprocessing和{}来加快我的抓取过程。在

为了做到这一点,我有这样的方法:

# First, create a list of pages to go over
for currentPage in range(firstPage, lastPage + 1):
    bookList.append("{}{}".format(PAGE_FORMAT, currentPage))

# Multiprocessing for each index page
pagePool = Pool(lastPage - firstPage + 1)
pagePool.map(scrapePage(bookList, book), (bookList, book))
pagePool.terminate()
pagePool.join()

在这段代码中,bookList只是一个要迭代的页面数组,book是一个最终存储数据的字典,scrapePage是一个获取网页和字典并对其进行处理的函数。在

我不确定如何编写我的map参数,因为我的函数接受多个参数。我尝试过单独编写函数作为第一个参数,然后将其他参数作为map参数,但这也不起作用。在

编辑:我检查了几个处理这种情况的问题,但是我不确定如何应用它(例如celery)。我想在我的程序中实现的是并行地刮取数据(同时刮取多个目录页,然后在每次调用中刮取一个页面,同时刮取目录中的多个条目)。在

尽管有问题的网站已经序列化了内容(在我最初的代码中,我会刮去目录第1页,然后在页面I上刮出条目1-100。。。然后转到第二页,重复),因为我使用的是字典,我不在乎内容是否序列化。使用multiprocessing还是celery更好?在


Tags: 数据函数代码目录mapfor参数字典