Python 将并发期货与dictionary.items()一起使用以迭代键、值

Python 将并发期货与dictionary.items()一起使用以迭代键、值,python,pandas,web-scraping,concurrent.futures,Python,Pandas,Web Scraping,Concurrent.futures,我想以更有效的方式从网页上抓取数据。我读过关于并发期货的书,但我不知道如何在我的脚本中使用它 从每个链接获取数据的函数包含四个参数: def scrape\u data\u for\u offer(b、m、url、loc): 然后,它会将刮取的数据保存到日期框中 它在循环中调用: for link, location in cars_link_dict.items(): scrape_data_for_offer(brand, model, link, location) 我希望它能加

我想以更有效的方式从网页上抓取数据。我读过关于并发期货的书,但我不知道如何在我的脚本中使用它

从每个链接获取数据的函数包含四个参数:

def scrape\u data\u for\u offer(b、m、url、loc):

然后,它会将刮取的数据保存到日期框中

它在循环中调用:

for link, location in cars_link_dict.items():
    scrape_data_for_offer(brand, model, link, location)
我希望它能加速这个刮取过程

我试着这样解决它:

with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor:
    executor.map(scrape_data_for_offer, brand, model, cars_link_dict.items())

但是它不起作用,你有什么办法解决这个问题吗?

在你的期货交易中,你只通过了三个项目。最后一项是两元素元组。因此,将函数更改为:

    def scrape_data_for_offer(b,m,info):
        url, loc = info
顺便说一下,单词是“刮”、“刮”和“刮”。很多很多人都在使用“scrp”、“SCRPED”和“scr*Ping”,但这些词都是指扔掉东西

顺便说一句,并发的东西并不能真正帮助你。我猜你用的是BeautifulSoup。BeautifulSoup是所有Python代码,全局解释器锁意味着在任何给定时间只有一个线程能够执行。在等待web站点响应交付时,您将获得一点重叠


此外,运行50个工人是没有意义的,除非你有50个处理器。他们都会为资源而战。如果您有8个处理器,则使用大约12个工人。在大多数情况下,您应该去掉该参数;它将默认为您机器中的处理器数量。

谢谢您的快速回答!你认为有没有办法加快这一进程?我必须从大约20万次拍卖中提取日期。这是为了我的大学项目,在下载完这些数据后,我将使用熊猫图书馆来处理它。这并不重要。使用concurrent会有一些好处,因为第一个页面可以开始处理,而第二个和第三个页面仍在等待网络,但是获取200000个web页面需要很长时间。我怀疑您是受I/O约束的,而不是受计算约束的。