知網文獻批量下載——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或者連接校園網

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM