本文实例讲述了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多进程方式抓取基金网站内容的方法分析