Python多进程方式抓取基金网站内容的方法分析

  

本文实例讲述了Python多进程方式抓取基金网站内容的方法。分享给大家供大家参考,具体如下:

  

在前面这篇//www.jb51.net/article/162418.htm我们已经简单了解了“python的多进程”,现在我们需要把抓取基金网站(28页)内容写成多进程的方式。

  

因为进程也不是越多越好,我们计划分3个进程执行。意思就是:把总共要抓取的28页分成三部分。

  

怎么分呢?

        #初始范围   r=范围(29)   #步长   一步=10   myList=[r] [x, x +一步x范围(0,len (r),步骤))   打印(myList) #【范围(11),范围(11、21),范围(21日29))      之前      

看上面代码,我们就把分成了三部分,列表里三个范围。

  

2,还记得我们抓取基金网站内容的<代码> getData() 函数?

        def getData(开始、结束):   x的范围(开始、结束+ 1):   #去第几页输入框   tonum=driver.find_element_by_id (“tonum”)   #去第几页提交按钮   jumpBtn=driver.find_element_by_id (“btn_jump”)   tonum.clear() #第x页输入框   tonum.send_keys (str (x)) #去第x页   jumpBtn.click() #点击按钮   WebDriverWait(司机,20)。直到(λ司机:driver.find_element_by_id \(“寻呼机”)   .find_element_by_xpath(“跨(@ value=https://www.yisu.com/zixun/{0}和@class !='结束页']" .format \ (x))   .get_attribute(“阶级”);(“”)!=1)   #保存抓取到的html内容   #保存到html目录下   张开(“。/html/{0} . txt”.format (x),“世界银行”)f:   f.write (driver.find_element_by_id (tableDiv) .get_attribute .encode (“innerHTML”) (“utf8 "))   f.close ()      之前      

函数是有2个参数:一个开始页码,一个结束页码,也就是从第页,到第页结束。

  

这2个参数实际上也是<代码>

  

改造<代码> getData() 函数如下(参数不同了):

        #循环抓取网页内容的函数   def getData (myrange):   在myrange x:   #去第几页输入框   tonum=driver.find_element_by_id (“tonum”)   #去第几页提交按钮   jumpBtn=driver.find_element_by_id (“btn_jump”)   tonum.clear() #第x页输入框   tonum.send_keys (str (x)) #去第x页   jumpBtn.click() #点击按钮   WebDriverWait(司机,20)。直到(λ司机:driver.find_element_by_id \(“寻呼机”)   .find_element_by_xpath(“跨(@ value=https://www.yisu.com/zixun/{0}和@class !='结束页']" .format \ (x))   .get_attribute(“阶级”);(“”)!=1)   #保存抓取到的html内容   #保存到html目录下   张开(“。/html/{0} . txt”.format (x),“世界银行”)f:   f.write (driver.find_element_by_id (tableDiv) .get_attribute .encode (“innerHTML”) (“utf8 "))   f.close ()      之前      

3,创建进程,把设置为上面的<代码> getData() :

        #初始范围   r=范围(1,int (total_page) + 1)   #步长   一步=10   myList=[r] [x, x +一步x范围(0,len (r),步骤)]#把页面分段   #创建进程   processList=[]   if __name__==癬_main__”:   myList r:   p=过程(目标=getData, args=(r))   processList.append (p)   #开始执行进程   processList p:   p.start ()      之前      

这样就有三个进程分别抓取。

  

4,多进程抓取基金网站多页内容完全代码:

        utf - 8编码:   从硒进口webdriver   从selenium.webdriver.support。ui进口WebDriverWait   从selenium.webdriver。支持导入expected_conditions   从多处理导入过程   司机=webdriver.PhantomJS (executable_path=r”你phantomjs的可执行文件路径”)   #请求一个网址   driver.get (“http://fund.eastmoney.com/fund.html”)   page_text=driver.find_element_by_id(“寻呼机”).find_element_by_xpath(“跨越[@class='公司']”)。text   total_page=" . join(过滤器(str.isdigit page_text)) #得到总共有多少页   #循环抓取网页内容的函数   def getData (myrange):   在myrange x:   #去第几页输入框   tonum=driver.find_element_by_id (“tonum”)   #去第几页提交按钮   jumpBtn=driver.find_element_by_id (“btn_jump”)   tonum.clear() #第x页输入框   tonum.send_keys (str (x)) #去第x页   jumpBtn.click() #点击按钮   WebDriverWait(司机,20)。直到(λ司机:driver.find_element_by_id \(“寻呼机”)   .find_element_by_xpath(“跨(@ value=https://www.yisu.com/zixun/{0}和@class !='结束页']" .format \ (x))   .get_attribute(“阶级”);(“”)!=1)   #保存抓取到的html内容   #保存到html目录下   张开(“。/html/{0} . txt”.format (x),“世界银行”)f:   f.write (driver.find_element_by_id (tableDiv) .get_attribute .encode (“innerHTML”) (“utf8 "))   f.close ()   #初始范围   r=范围(1,int (total_page) + 1)   #步长   一步=10   myList=[r] [x, x +一步x范围(0,len (r),步骤)]#把页面分段   #创建进程   processList=[]   if __name__==癬_main__”:   myList r:   p=过程(目标=getData, args=(r))   processList.append (p)   #开始执行进程   processList p:   p.start ()      

Python多进程方式抓取基金网站内容的方法分析