【python】多进程和selenium结合如何实现?

问题描述

准备用多进程的方式同时爬取深交所网站多个上市公司的处罚信息,但是写出来的代码只对其中的一个上市公司名称执行,很困惑。

请问应该如下修改,以及代码中有哪些可以优化的地方。非常感谢!

代码如下:

相关代码

#爬取网页
import requests,time,os,multiprocessing
from selenium import webdriver
def szse(name):
    driver = webdriver.Edge()
    driver.maximize_window() 
    driver.get('http://www.szse.cn/disclosure/listed/credit/record/index.html')
    time.sleep(5)
    nameElem=driver.find_element_by_id('1759_cxda_tab1_txtDsr')
    buttonElem=driver.find_element_by_class_name('confirm-query btn-query-primary')
    nameElem.clear()
    nameElem.send_keys(name)
    buttonElem.click()
    time.sleep(20)
    pdfElem = driver.find_elements_by_link_text('查看')#判断是否有处罚。没有处罚的,pdfElem会返回空列表
    if pdfElem==[]:
        driver.save_screenshot(".\\深交所_查询结果\\%s.png" % (name + '_无处罚'))#截图方法 or get_screenshot_as_file
        print(name + ':深交所无处罚纪录,已截图')
    else:
        driver.save_screenshot(".\\深交所_查询结果\\%s.png" % (name + '_处罚汇总'))
        print(name + '深交所有处罚,已截图,待下载pdf')
        a=1
        for i in range(len(pdfElem))
            partial_url=pdfElem[i].get_attribute('encode-open')
            url='http://reportdocs.static.szse.cn/'+partial_url
            res=requests.get(url)
            res.raise_for_status()
            time.sleep(10)
            open('.\\深交所_查询结果\\%s_处罚纪录_%d.pdf'%(name,a),'wb').write(res.content)
            print(name+'深交所处罚纪录已保存'+str(a)+'份')
            a = a + 1
    print(name+'深交所处罚纪录保存完毕,合计'+str(a-1)+'份')
    driver.quit()
   #多进程
   if __name__=='__main__':
       print('请输入需要查询的证券简称,用于深交所,以空格间隔')
       nameSZ = input() #如:海南海药 长生生物 坚瑞沃能
       st = time.time()
       SZlist = nameSZ.split(' ')
       os.mkdir('.\\深交所_查询结果')
       #应该是这段出了问题:
       pool=multiprocessing.Pool()
       for name in SZlist:
           pool.apply_async(func=shse, args=(name,))
       #上段写成这样也不行:pool.apply_async(func=shse, args=SZlist),而且只会查询第一个证券简称的第一个字
       pool.close()
       pool.join()
       print('完成查询和保存,用时 %d 分 %d 秒'%((time.time()-st)//60,round((time.time()-st)%60)))
   


阅读 4.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题