Python 3.x 站点抓取脚本中的多进程

Python 3.x 站点抓取脚本中的多进程,python-3.x,web-scraping,multiprocessing,Python 3.x,Web Scraping,Multiprocessing,到今天为止,我已经有了一个脚本,可以读取站点中的数据表,并在每一行中循环单击项目以获取传统数据,然后返回并重复。伪代码如下所示 browser=webdriver.Chrome() node_list=FuncNode(browser) #This function loops through each row and get in #text the node identifier. This way, I don't lose the reference after #cli

到今天为止,我已经有了一个脚本,可以读取站点中的数据表,并在每一行中循环单击项目以获取传统数据,然后返回并重复。伪代码如下所示

browser=webdriver.Chrome()

node_list=FuncNode(browser)  #This function loops through each row and get in 
  #text the node identifier. This way, I don't lose the reference after 
  #clicking and going back due to changes in DOM
一旦我拿到名单

for track_id in node_list:

   node=Search_for_node_in_main_page(track_id) #Now I have the row in a node

   #Get some data

   button=Get_row_button(node)

   button.click()

   #Now I change the focus onto the new tab, do some scraping, and write all 
   data to a MySQL database

   #Close new tab and focus back my browser on main tab 

   #end of the loop, repeat until the last item on list is scraped
这通常需要一段时间,所以我想知道如何使用多处理优化它。从我所读到的内容来看,最接近的事情是一旦我有了列表,创建一个池,将所有代码封装在一个函数中,并将池应用于列表和该函数

if __name__=='__main__':
  with Pool(4) as p:
    records = p.map(cool_function,node_list)

    p.terminate()
    p.join()
我的问题是,我在这里积极使用浏览器,所以我想对于每个流程,我都必须打开不同的浏览器。如果是这样的话,我如何重用它们?这主要是因为页面大量使用javascript,而且根据页面的不同,加载所需的时间比刮取4-5行所需的时间要长

此外,考虑到它在某种程度上是有效的,它会对MySQL从不同进程同时在其上进行写操作产生影响吗


那么,简而言之,我如何才能使多进程在这里工作并优化我的初始脚本?

听起来您正在尝试手动执行scrapy将为您执行的操作。如果你不需要浏览器的话,我建议你改用“吝啬路线”。也许按照答案的思路,投票最多的可能更可行。使用selenium,您将遇到与您的客户所说完全相同的问题。虽然可以重用浏览器会话,但一次只能用于一件事。如果你弄清楚你需要哪种API调用,然后只调用它们,你的解决方案会更快速地得到澄清,web是,并提供足球统计数据。该网站不提供免费的API,并且大量使用javascript。我认为加快这个过程的唯一方法是,如果我能在主页上点击,一次访问几张纸。正如我所说的,问题是每次单击都会打开一个新选项卡,我必须在浏览器中关注它,因此该对象不能用于并行单击。我查看了站点,主要数据来自对的API调用,然后他们在第二个间隔上进行轮询,该间隔看起来像请求中的时间戳。问题是,要么处理浏览器JS渲染开销,要么使用API。。。要从这些API中获得任何意义,您必须花一点时间查看JS代码,或者将呈现输出中的值与数据结构进行比较,以确定是什么。考虑到这个问题,我不确定使用selenium和处理开销是否更容易,或者尝试找出API是否更容易。不过,我可能会倾向于API路线。