python 批量下载知网(CNKI)论文
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)论文相关推荐
- python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记...
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...
- python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 顶...
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...
- Python 批量下载SIGMOD,VLDB的论文 Mac OS
这里写自定义目录标题 Python 批量下载SIGMOD,VLDB的论文 Mac OS 实现 0.要爬取的网站 1.下载单篇论文 2.获得所有论文的链接 完整代码 Python 批量下载SIGMOD, ...
- 知网博士论文校外查找下载方法
校外查找下载知网博士论文的方法如下: 1.首先使用文献党下载器(wxdown.org)进入知网,在文献党下载器资源库双击"知网"名称即可进入知网 2.进入知网,输入关键词.篇名.作 ...
- 在家里免费下载知网内的论文方法
方法1 点击进入 http://www.cn-ki.net/ 输入要搜索的论文题目 通过微信扫描二维码,关注后,并且发送XZM. 将获取的下载码输入后,就可以下载知网论文. 亲测可行 -------- ...
- 知网学术论文下载caj格式转换 caj转pdf
文章目录 前言 一.海外版知网 二.Zotero用户,使用Zotero Connector便可以直接在非海外版知网下载PDF格式,不论文期刊论文还是硕博论文 三.知网油猴脚本 前言 知网学术论文,特别 ...
- 利用 Python 和 Selenium 自动下载知网期刊文件
利用Selenium自动下载知网期刊文件 1 下载 Chrome 的 Webdriver 2 代码 2.1 导入相关的包 2.2 设置 WebDriver 2.3 找到期刊名在网页上对应元素 2.4 ...
- python批量下载模库网图片
这里写自定义目录标题 python批量下载模库网图片 步骤: 代码 python批量下载模库网图片 步骤: 获取页数 获取列表页 获取图片链接和名字相关字典 创建存放图片的文件夹 下载图片 代码 im ...
- 论文必备-五大学术文献资料推荐网站+免费下载知网、万方的论文资料
五大学术文献资料推荐网站 国家哲学社会科学文献中心 http://www.ncpssd.org 提供免费下载,提供各类哲学社会科学文献. 搜索功能强大,提供分类搜索.提名/关键词等搜索,也可以输入关键 ...
最新文章
- django 设置媒体url_Django设置网站地图sitemap
- MVC %%与%=%与区别
- 【项目实战课】基于Pytorch的3DCNN视频分类与行为识别实战
- 【年终总结】2020年有三AI做了什么,2021年我们要做什么?
- 资深项目经理的10条项目管理心得
- 台湾大学林轩田机器学习技法课程学习笔记10 -- Random Forest
- .net函数查询_特来电智能分析平台动态查询架构创新实践
- html中dom多会有影响吗,DOM操作造成的页面卡顿问题及解决
- 模拟ios_王者荣耀策划Donny:安卓IOS今年或实现互通!模拟战一周一更新
- 使用过这么多年Hibernate,对底层原理你知多少?
- CodeVs天梯青铜Bronze题解
- svn服务器记录日志文件,svn服务器日志时间设置
- linux:进程管理与SELinux
- QT Opencv 抽奖系统
- 笔记本无线上网怎么通过网线共享给台式机 设置方法
- (白光LED显色性)计算白光LED的显色指数(CRI)数据异常,色质指数CQS来替代
- nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
- Warning: Attempt to present ... on … which is already presenting null
- CRMEB知识付费系统安装搭建【常见问题-19.支付宝支付报错invalid [default store dir]: /tmp/】
- char 类型的数组,在函数内能最大能定义多大?
热门文章
- 【蓝桥杯Python组】既约分数
- 算法训练营 重编码_我在编码训练营中的经验(以及是否适合您)
- 软件测试需要的证书认证
- 自动驾驶中间件之二:通信中间件,DDS与SOME/IP 谁主沉浮?
- 逻辑航线信息学系列教程:二进制(Binary)
- 后端思维篇:手把手教你写一个并行调用模板
- 外设篇:SD卡等外存设备
- 【PC】完美解决 office2010 错误1920 未能启动服务 “Office Software Protection Platform”(osppsvc)
- PHP文件开启SSI(以CMSTOP环境为例)
- 什么是以太坊?什么是智能合约?