1、目的:
朋友找我去知网帮他下载点相关论文,发现老是要去点击文章。点击下载,显得很麻烦,百度一下,别人的方法太复杂,所以自己写了一个python脚本自动下载知网论文。
2、前期准备
1)安装python 2.7
2)安装 selenium

pip install selenium

3)下载一个chromedriver.exe,放到脚本同一个文件夹内
4)安装chrome浏览器
3、直接撸代码

(a)指定关键字下载知网论文

downloadCNKI.py
#!/usr/bin/env Python
# coding=utf-8
import  os
from time import sleep
from selenium import webdriverdef browser_init(isWait):options = webdriver.ChromeOptions()prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'E:\\PycharmProjects\\downloadCNKI\\output'}options.add_experimental_option('prefs', prefs)browser = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=options)browser.set_window_size(500,500)if isWait:browser.implicitly_wait(50)return browserdef searchKey(keyword):browser.get("http://kns.cnki.net/kns/brief/default_result.aspx")browser.find_element_by_id('txt_1_value1').send_keys(keyword)browser.find_element_by_id('btnSearch').click()def switchToFrame(browser):#print 'start switch'browser.switch_to.frame('iframeResult')#print 'end switch'def getDownloadLinks(browser,paper_downloadLinks):for link in browser.find_elements_by_css_selector('a[href^=\/kns\/detail]'):#link.click()url=link.get_attribute('href')url_part = url.split('&')[3:6]url_str= '&'.join(url_part)down_url='http://kns.cnki.net/KCMS/detail/detail.aspx?'+url_str#print down_urlpaper_downloadLinks.append(down_url)def switchToPage(browser,n):for link in browser.find_elements_by_css_selector('a[href^=\?curpage]'):url=link.get_attribute('href')print urlpageInd='curpage=%d&'%nprint pageIndif pageInd in url:print "page: "+urllink.click()break
def switchNextPage(browser):browser.find_element_by_link_text(u'下一页').click()def do_download(driver,urls,fail_downLoadUrl):for url in urls:print urldriver.get(url)paper_title=driver.titleprint "paper title"+paper_titleif u'中国专利全文数据库' in paper_title:continueprint "try  download :"+paper_titletry:driver.find_element_by_xpath("//a[contains(text(),'PDF下载')]").click()print "download success!!!"except Exception as e:try:driver.find_element_by_xpath("//a[contains(text(),'整本下载')]").click()print "download success!!!"except Exception as e:print "download fail!!!"fail_downLoadUrl.append(url)def usage():print "example : python downloadCNKI.py -k keyword  -p 1"if __name__=="__main__":keyword=u'三角形'      #论文搜索的关键字pageNum = 1     # 下载多少页的论文browser=browser_init(True)searchKey(keyword)switchToFrame(browser)paper_downloadLinks = []    #论文下载链接curPage=1while curPage<=pageNum:getDownloadLinks(browser,paper_downloadLinks)switchNextPage(browser);curPage+=1browser.quit()print "采集了%d条数据"% len(paper_downloadLinks)driver=browser_init(False)fail_downLoadUrl=[]         #记录下失败的网站do_download(driver,paper_downloadLinks,fail_downLoadUrl)print  fail_downLoadUrltryNum=0#尝试N次重新下载没有下载的while tryNum<5:if len(fail_downLoadUrl) !=0:paper_downloadLinks=fail_downLoadUrlfail_downLoadUrl=[]do_download(driver, paper_downloadLinks, fail_downLoadUrl)print fail_downLoadUrlelse:breaktryNum+=1sleep(60)driver.quit()

(b)指定论文题目下载知网论文
这个需要和脚本同目录下新建一个downfile.txt,按行存放需要下载题目

指定题目到downfile.txt的知网下载.py
#!/usr/bin/env Python
# coding=utf-8
import  os
from time import sleep
from selenium import webdriverdef browser_init(isWait):options = webdriver.ChromeOptions()prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'E:\\PycharmProjects\\downloadCNKI\\output'}options.add_experimental_option('prefs', prefs)browser = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=options)browser.set_window_size(500,500)if isWait:browser.implicitly_wait(50)return browserdef searchKey(keyword):browser.get("http://kns.cnki.net/kns/brief/default_result.aspx")browser.find_element_by_id('txt_1_value1').send_keys(keyword)browser.find_element_by_id('btnSearch').click()def switchToFrame(browser):#print 'start switch'browser.switch_to.frame('iframeResult')#print 'end switch'def getDownloadLinks(browser,paper_downloadLinks):for link in browser.find_elements_by_css_selector('a[href^=\/kns\/detail]'):#link.click()url=link.get_attribute('href')url_part = url.split('&')[3:6]url_str= '&'.join(url_part)down_url='http://kns.cnki.net/KCMS/detail/detail.aspx?'+url_str#print down_urlpaper_downloadLinks.append(down_url)def getKeywordDownloadLink(browser,keyword,paper_downloadLinks):link=browser.find_element_by_link_text(keyword)url = link.get_attribute('href')#print urlurl_part = url.split('&')[3:6]url_str = '&'.join(url_part)down_url = 'http://kns.cnki.net/KCMS/detail/detail.aspx?' + url_str#print down_urlpaper_downloadLinks.append(down_url)def switchToPage(browser,n):for link in browser.find_elements_by_css_selector('a[href^=\?curpage]'):url=link.get_attribute('href')print urlpageInd='curpage=%d&'%nprint pageIndif pageInd in url:print "page: "+urllink.click()break
def switchNextPage(browser):browser.find_element_by_link_text(u'下一页').click()def do_download(driver,urls,fail_downLoadUrl):for url in urls:print urldriver.get(url)paper_title=driver.titleprint "paper title"+paper_titleif u'数据库' in paper_title:continueprint "try  download :"+paper_titletry:driver.find_element_by_xpath("//a[contains(text(),'PDF下载')]").click()print "download success!!!"except Exception as e:try:driver.find_element_by_xpath("//a[contains(text(),'整本下载')]").click()print "download success!!!"except Exception as e:print "download fail!!!"fail_downLoadUrl.append(url)def usage():print "example : python downloadCNKI.py -k keyword  -p 1"if __name__=="__main__":paper_downloadLinks = []  # 论文下载链接pageNum = 1  # 下载多少页的论文browser = browser_init(True)file = open("downfile.txt")lineDatas = file.readlines();for line in lineDatas:keyword=line.strip('\n').decode('gbk')#keyword=u'三角形'      #论文搜索的关键字print u"采集: %s"% keywordsearchKey(keyword)switchToFrame(browser)downloadLinks=[]getKeywordDownloadLink(browser,keyword,downloadLinks)paper_downloadLinks.append(''.join(downloadLinks))file.close()browser.quit()print "采集了%d条数据"% len(paper_downloadLinks)driver=browser_init(False)fail_downLoadUrl=[]         #记录下失败的网站do_download(driver,paper_downloadLinks,fail_downLoadUrl)print  fail_downLoadUrltryNum=0#尝试N次重新下载没有下载的while tryNum<5:if len(fail_downLoadUrl) !=0:paper_downloadLinks=fail_downLoadUrlfail_downLoadUrl=[]do_download(driver, paper_downloadLinks, fail_downLoadUrl)print "重新下载 ",print  fail_downLoadUrlelse:breaktryNum+=1sleep(60)driver.quit()

很好用,让我帮助同学下载知网论文,妈妈再也不要担心我点错了。。。

python 批量下载知网(CNKI)论文相关推荐

  1. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  2. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 顶...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  3. Python 批量下载SIGMOD,VLDB的论文 Mac OS

    这里写自定义目录标题 Python 批量下载SIGMOD,VLDB的论文 Mac OS 实现 0.要爬取的网站 1.下载单篇论文 2.获得所有论文的链接 完整代码 Python 批量下载SIGMOD, ...

  4. 知网博士论文校外查找下载方法

    校外查找下载知网博士论文的方法如下: 1.首先使用文献党下载器(wxdown.org)进入知网,在文献党下载器资源库双击"知网"名称即可进入知网 2.进入知网,输入关键词.篇名.作 ...

  5. 在家里免费下载知网内的论文方法

    方法1 点击进入 http://www.cn-ki.net/ 输入要搜索的论文题目 通过微信扫描二维码,关注后,并且发送XZM. 将获取的下载码输入后,就可以下载知网论文. 亲测可行 -------- ...

  6. 知网学术论文下载caj格式转换 caj转pdf

    文章目录 前言 一.海外版知网 二.Zotero用户,使用Zotero Connector便可以直接在非海外版知网下载PDF格式,不论文期刊论文还是硕博论文 三.知网油猴脚本 前言 知网学术论文,特别 ...

  7. 利用 Python 和 Selenium 自动下载知网期刊文件

    利用Selenium自动下载知网期刊文件 1 下载 Chrome 的 Webdriver 2 代码 2.1 导入相关的包 2.2 设置 WebDriver 2.3 找到期刊名在网页上对应元素 2.4 ...

  8. python批量下载模库网图片

    这里写自定义目录标题 python批量下载模库网图片 步骤: 代码 python批量下载模库网图片 步骤: 获取页数 获取列表页 获取图片链接和名字相关字典 创建存放图片的文件夹 下载图片 代码 im ...

  9. 论文必备-五大学术文献资料推荐网站+免费下载知网、万方的论文资料

    五大学术文献资料推荐网站 国家哲学社会科学文献中心 http://www.ncpssd.org 提供免费下载,提供各类哲学社会科学文献. 搜索功能强大,提供分类搜索.提名/关键词等搜索,也可以输入关键 ...

最新文章

  1. django 设置媒体url_Django设置网站地图sitemap
  2. MVC %%与%=%与区别
  3. 【项目实战课】基于Pytorch的3DCNN视频分类与行为识别实战
  4. 【年终总结】2020年有三AI做了什么,2021年我们要做什么?
  5. 资深项目经理的10条项目管理心得
  6. 台湾大学林轩田机器学习技法课程学习笔记10 -- Random Forest
  7. .net函数查询_特来电智能分析平台动态查询架构创新实践
  8. html中dom多会有影响吗,DOM操作造成的页面卡顿问题及解决
  9. 模拟ios_王者荣耀策划Donny:安卓IOS今年或实现互通!模拟战一周一更新
  10. 使用过这么多年Hibernate,对底层原理你知多少?
  11. CodeVs天梯青铜Bronze题解
  12. svn服务器记录日志文件,svn服务器日志时间设置
  13. linux:进程管理与SELinux
  14. QT Opencv 抽奖系统
  15. 笔记本无线上网怎么通过网线共享给台式机 设置方法
  16. (白光LED显色性)计算白光LED的显色指数(CRI)数据异常,色质指数CQS来替代
  17. nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
  18. Warning: Attempt to present ... on … which is already presenting null
  19. CRMEB知识付费系统安装搭建【常见问题-19.支付宝支付报错invalid [default store dir]: /tmp/】
  20. char 类型的数组,在函数内能最大能定义多大?

热门文章

  1. 【蓝桥杯Python组】既约分数
  2. 算法训练营 重编码_我在编码训练营中的经验(以及是否适合您)
  3. 软件测试需要的证书认证
  4. 自动驾驶中间件之二:通信中间件,DDS与SOME/IP 谁主沉浮?
  5. 逻辑航线信息学系列教程:二进制(Binary)
  6. 后端思维篇:手把手教你写一个并行调用模板
  7. 外设篇:SD卡等外存设备
  8. 【PC】完美解决 office2010 错误1920 未能启动服务 “Office Software Protection Platform”(osppsvc)
  9. PHP文件开启SSI(以CMSTOP环境为例)
  10. 什么是以太坊?什么是智能合约?