知网文献批量下载——python
知网文章批量下载
通过读取txt文档中的参考文献来实现批量下载文献
参考文献格式:
[1]陈晓强. 基于BYOD的高中Python项目式学习模式研究[J]. 试题与研究,2020(18):112-113. [2]安娜,徐洪峰. 基于导向车道实时利用率的单点全感应式信号控制方法[J]. 工业技术创新,2020,07(03):61-65. [3]郑伟,刘玉林. 基于复杂网络的高校教师职业倦怠热点研究[J]. 黑龙江高教研究,2020,38(06):50-55.
详细代码:
1 #cnkiBatchDown.py 2 import time 3 import re 4 from selenium import webdriver 5 from selenium.webdriver.support.select import Select 6 7 opt = webdriver.ChromeOptions() #创建浏览器 8 #opt.set_headless() #无窗口模式 9 10 out_path = r\'E:\test\文献\' # 是你想指定的路径 11 prefs = {\'profile.default_content_settings.popups\': 0, \'download.default_directory\': out_path} 12 opt.add_experimental_option(\'prefs\', prefs) 13 14 driver = webdriver.Chrome(options=opt) #创建浏览器对象 15 time.sleep(0.5) 16 driver.maximize_window() #最大化窗口 17 driver.get(\'http://new.gb.oversea.cnki.net/kns/brief/result.aspx?dbprefix=SCDB\') #打开网页 18 time.sleep(0.5) #加载等待 19 20 with open(\'text.txt\', \'r\', encoding=\'UTF-8\') as f: 21 lines = f.readlines() # 读取文本中所有内容,并保存在一个列表中,列表中每一个元素对应一行数据 22 print(\'共\'+str(len(lines))+\'篇\') 23 starttime = time.time() 24 for i in range(26,len(lines)): 25 print(\'\n\n正在下载第\'+str(i+1)+\'篇\') 26 print(lines[i].strip(\'\n\')) # 每一行数据都包含了换行符 27 string = lines[i] 28 firstpoint = string.index(\'.\') 29 str1 = string[firstpoint+1:] 30 #print(str1) 31 autherEnd = str1.index(\',\') 32 titleStart = str1.index(\'.\') 33 titleEnd = str1.index(\'[\') 34 type1 = str1[titleEnd+1] 35 if type1 == \'D\': 36 autherEnd = titleStart 37 38 #print(autherEnd) 39 #print(titleStart,titleEnd) 40 print(\'第一作者:\', str1[:autherEnd]) 41 print(\'标题:\', str1[titleStart+2:titleEnd]) 42 print(\'类型:\', str1[titleEnd+1]) 43 44 title = str1[titleStart+2:titleEnd] 45 auther = str1[:autherEnd] 46 47 handles = driver.window_handles # 获取当前窗口句柄集合(列表类型) 48 driver.switch_to.window(handles[0]) 49 s = Select(driver.find_element_by_id("txt_1_sel")) 50 # 定位选项 51 s.select_by_value("TI") # 选择value="TI"的项:通过value属性 52 driver.find_element_by_xpath(\'//*[@id="txt_1_value1"]\').clear() 53 driver.find_element_by_xpath(\'//*[@id="au_1_value1"]\').clear() 54 driver.find_element_by_xpath(\'//*[@id="txt_1_value1"]\').send_keys(title) #利用xpath查找元素进行输入文本 55 driver.find_element_by_xpath(\'//*[@id="au_1_value1"]\').send_keys(auther) 56 driver.find_element_by_xpath(\'//*[@id="btnSearch"]\').click() 57 time.sleep(0.5) 58 driver.switch_to.frame("iframeResult") 59 time.sleep(1.5) 60 if type1 == \'J\' : 61 driver.find_element_by_xpath("/html/body/form/table/tbody/tr[2]/td/table/tbody/tr[2]/td[8]/a").click()#期刊直接点击下载 62 print("期刊下载") 63 time.sleep(5) 64 elif type1 == \'C\': 65 print("跳过会议论文") 66 continue 67 else: 68 driver.find_element_by_xpath("/html/body/form[1]/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]/a").click()#硕博论文点击跳转 69 print("硕博论文跳转") 70 handles = driver.window_handles # 获取当前窗口句柄集合(列表类型) 71 driver.switch_to.window(handles[1]) 72 driver.find_element_by_xpath("/html/body/div[6]/div[2]/div[2]/div[1]/div[2]/a[4]").click()#硕博论文点击下载 73 print("硕博论文下载") 74 time.sleep(5) 75 driver.close() #关闭当前标签页 76 print(\'共计用时: \', round(time.time() - starttime, 0), \'秒\', end="\r") 77 #driver.quit()
实现方式比较简单粗暴,同时程序运行时也存在一些小问题,如网页加载速度比程序运行慢时会出现文献下载重复
程序运行前要先登录可用的VPN或者连接校园网
版权声明:本文为zyt5014原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。