最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Python?Selenium自動化導出新版WOS(web?of?science)檢索結(jié)果的問題

 更新時間:2022年01月07日 14:44:59   作者:Parzival_  
這篇文章主要介紹了Python?Selenium自動化導出新版WOS(web?of?science)檢索結(jié)果,本代碼屬于半自動化導出,考慮到開發(fā)效率等因素,有兩處在首次導出時需要手動操作,具體實現(xiàn)過程跟隨小編一起看看吧

selenium 介紹

selenium 是一個 web 的自動化測試工具,不少學習功能自動化的同學開始首選 selenium ,因為它相比 QTP 有諸多有點:

  • 免費,也不用再為破解 QTP 而大傷腦筋
  • 小巧,對于不同的語言它只是一個包而已,而 QTP 需要下載安裝1個多 G 的程序。
  • 這也是最重要的一點,不管你以前更熟悉 C、 java、ruby、python、或都是 C# ,你都可以通過 selenium 完成自動化測試,而 QTP 只支持 VBS
  • 支持多平臺:windows、linux、MAC ,支持多瀏覽器:ie、ff、safari、opera、chrome
  • 支持分布式測試用例的執(zhí)行,可以把測試用例分布到不同的測試機器的執(zhí)行,相當于分發(fā)機的功能。

官方文檔:

https://selenium-python.readthedocs.io/index.html
https://seleniumhq.github.io/selenium/docs/api/py/api.html

寫在前面

有的時候需要某個領(lǐng)域的所有論文數(shù)據(jù),此時web of science數(shù)據(jù)庫檢索的論文結(jié)果可能動輒上萬甚至幾十萬,然而網(wǎng)站限制單次導出條數(shù)為1000(如果需要引文字段則僅500,僅導出為txt可包含引用詳細信息),需要導出幾十上百次,手動做太費神,因此寫一個爬蟲腳本自動導出。

2022.1.6舊版web of science正式下線了,這里是對新版網(wǎng)站重新開發(fā)的自動化導出代碼。

使用本代碼需要:

  • 國內(nèi)大學學生賬號(登錄wos使用)
  • 火狐瀏覽器
  • geckodriver 0.24.0 (放在爬蟲代碼同一個文件夾下)

嚴格來說本代碼屬于半自動化導出,考慮到開發(fā)效率等因素,有兩處在首次導出時需要手動操作,后文細說。

遇到“selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: …”的報錯首先排查網(wǎng)絡問題,可以把對應代碼行之前的瀏覽器等待時間加長。

正文

代碼情況:

  • 輸入:wos檢索結(jié)果網(wǎng)址、需要導出的條數(shù)、導出結(jié)果存儲路徑
  • 輸出:導出文件(格式自選,一般txt/excel)

1、需要導入的包,以及測試入口。

其中url是在完成wos檢索之后的檢索頁面網(wǎng)址。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import os
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

if __name__=='__main__':

    '''WOS“檢索結(jié)果”頁面的網(wǎng)址'''
    url = 'https://www.webofscience.com/wos/woscc/summary/64c4e5ff-832d-476d-8112-51e908a600b1-1d5405d5/relevance/1'
    
    startdownload(url,80195,'/Users/username/folder',False) # 主要函數(shù)
    print('Done')

2、主要函數(shù)

兩次手動操作:

  • 首次打開wos必須登錄, 在學校統(tǒng)一身份認證處需要手動輸入信息并點擊登錄;
  • 第一次導出時需要手動修改文件處理方式為"保存文件", 并勾選"以后都采用相同動作處理此類文件"

輸入?yún)?shù)見函數(shù)說明。

  • 選擇導出格式處給出了excel和txt兩種,默認excel,可自選。
def startdownload(url,record_num,SAVE_TO_DIRECTORY,record_format='excel',reverse=False):
    '''url -> 檢索結(jié)果網(wǎng)址; \n 
       record_num -> 需要導出的記錄條數(shù)(檢索結(jié)果數(shù)); \n
       SAVE_TO_DIRECTORY -> 記錄導出存儲路徑(文件夾);\n
       record_format -> 導出記錄格式, default='excel';\n
       reverse -> 是否設(shè)置檢索結(jié)果降序排列, default=False \n
       ----------------------------------------------------
       tip1:首次打開wos必須登錄,在學校統(tǒng)一身份認證處需要手動輸入驗證碼并點擊登錄; 
       tip2:第一次導出時需要手動修改文件處理方式為"保存文件",并勾選"以后都采用相同動作處理此類文件"
    '''
    # SAVE_TO_DIRECTORY = '/Users/chenzijing/Desktop/研/畢業(yè)論文/畢設(shè)研/代碼/論文數(shù)據(jù)'#/firefox'
    fp = webdriver.FirefoxProfile()
    fp.set_preference('browser.download.dir', SAVE_TO_DIRECTORY)
    fp.set_preference("browser.download.folderList", 2)
    fp.set_preference("browser.download.manager.showWhenStarting", False)
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain")
    browser = webdriver.Firefox(executable_path=r'geckodriver',firefox_profile=fp)
    browser.get(url)
    time.sleep(3)
    login(browser)
    browser.get(url)
    time.sleep(5)
    '''獲取需要導出的文獻數(shù)量'''
    # record_num = int(browser.find_element_by_css_selector('.brand-blue').text)
    # 按時間降序排列
    if reverse: 
        browser.find_element_by_css_selector('.top-toolbar wos-select:nth-child(1) button:nth-child(1) span:nth-child(2)').click()
        browser.find_element_by_css_selector("div.wrap-mode:nth-child(2) span:nth-child(1)").click() 
        time.sleep(3)
    # 叉掉彈窗
    browser.find_element_by_css_selector('#onetrust-accept-btn-handler').click()
    time.sleep(1)
    browser.find_element_by_css_selector('#pendo-close-guide-7176fce7').click()
    # 開始導出
    start = 1 # 起始記錄
    i = 0 # 導出記錄的數(shù)字框id隨導出次數(shù)遞增
    while start<record_num:
        browser.find_element_by_css_selector('button.cdx-but-md:nth-child(2) span:nth-child(1)').click() # 導出
        # 選擇導出格式
        if record_format=='excel':
            browser.find_element_by_css_selector('#exportToExcelButton').click() # 選擇導出格式為excel
        else:
            browser.find_element_by_css_selector('#exportToFieldTaggedButton').click() # 選擇導出格式為txt
        browser.find_element_by_css_selector('#radio3 label:nth-child(1) span:nth-child(1) span:nth-child(1)').click() # 選擇自定義記錄條數(shù)
        send_key(browser,'#mat-input-%d'%i,start)#mat-input-2
        send_key(browser,'#mat-input-%d'%(i+1),start+999)
        browser.find_element_by_css_selector('.margin-top-5 button:nth-child(1)').click() # 更改導出字段
        browser.find_element_by_css_selector('div.wrap-mode:nth-child(3) span:nth-child(1)').click() # 選擇所需字段(3完整)(4自定義)
        browser.find_element_by_css_selector('div.flex-align:nth-child(3) button:nth-child(1)').click() # 點擊導出
        time.sleep(10) # 等待下載完畢
        # 導出文件按照包含的記錄編號重命名
        rename_file(SAVE_TO_DIRECTORY,'record-'+str(start)+'-'+str(start+999))
        start = start + 1000
        i = i + 2
    time.sleep(10)
    browser.quit()

3、主要函數(shù)中調(diào)用的其他函數(shù)

login函數(shù)中“學校的統(tǒng)一身份驗證”部分可以選擇手動,或者根據(jù)學校網(wǎng)站自行修改。
其他無需修改。

def login(browser):
    '''登錄wos'''
    # 通過CHINA CERNET Federation登錄
    browser.find_element_by_css_selector('.mat-select-arrow').click()
    browser.find_element_by_css_selector('#mat-option-9 span:nth-child(1)').click()
    browser.find_element_by_css_selector('button.wui-btn--login:nth-child(4) span:nth-child(1) span:nth-child(1)').click()
    time.sleep(3)
    login = browser.find_element_by_css_selector('#show')
    login.send_keys('xxxx大學') # 改成你的學校名
    time.sleep(0.5)
    browser.find_element_by_css_selector('.dropdown-item strong:nth-child(1)').click()
    browser.find_element_by_css_selector('#idpSkipButton').click()
    time.sleep(1)
    #! 跳轉(zhuǎn)到學校的統(tǒng)一身份驗證(想自動輸入賬號密碼就把下面兩行注釋解除,按照自己學校的網(wǎng)址修改一下css選擇器路徑)
    # browser.find_element_by_css_selector('input#un').send_keys('你的學號') # 改成你的學號/賬號
    # browser.find_element_by_css_selector('input#pd').send_keys('你的密碼') # 改成你的密碼
    time.sleep(20) #! 手動輸入賬號、密碼、驗證碼,點登錄
def send_key(browser,path,value):
    '''browser -> browser;\n
       path -> css選擇器;\n
       value -> 填入值
    '''
    markto=browser.find_element_by_css_selector(path)
    markto.clear()
    markto.send_keys(value)
def rename_file(SAVE_TO_DIRECTORY,name,record_format='excel'):
    '''導出文件重命名 \n
       SAVE_TO_DIRECTORY -> 導出記錄存儲位置(文件夾);\n 
       name -> 重命名為
    '''
    # files = list(filter(lambda x:'savedrecs' in x and len(x.split('.'))==2,os.listdir(SAVE_TO_DIRECTORY)))
    while True:
        files = list(filter(lambda x:'savedrecs' in x and len(x.split('.'))==2,os.listdir(SAVE_TO_DIRECTORY)))
        if len(files)>0:
            break
    files = [os.path.join(SAVE_TO_DIRECTORY, f) for f in files]  # add path to each file
    files.sort(key=lambda x: os.path.getctime(x))
    newest_file = files[-1]
    # newest_file=os.path.join(SAVE_TO_DIRECTORY,'savedrecs.txt')
    if record_format=='excel':
        os.rename(newest_file, os.path.join(SAVE_TO_DIRECTORY, name+".xls"))
    else:
        os.rename(newest_file, os.path.join(SAVE_TO_DIRECTORY, name+".txt"))

4、導出結(jié)果

部分結(jié)果,展示導出形式。

到此這篇關(guān)于Python Selenium自動化導出新版WOS(web of science)檢索結(jié)果的文章就介紹到這了,更多相關(guān)Python Selenium自動化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 保姆級官方y(tǒng)olov7訓練自己的數(shù)據(jù)集及項目部署詳解

    保姆級官方y(tǒng)olov7訓練自己的數(shù)據(jù)集及項目部署詳解

    最近使用了YOLOv7訓練自己的數(shù)據(jù)集,接下來簡單記錄一下項目的部署,這篇文章主要給大家介紹了關(guān)于保姆級官方y(tǒng)olov7訓練自己的數(shù)據(jù)集及項目部署的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • python中判斷類型函數(shù)isinstance()示例詳解

    python中判斷類型函數(shù)isinstance()示例詳解

    isinstance()函數(shù)是Python的內(nèi)置函數(shù),用于判斷一個變量是否是某個類型或者是該類型的子類的實例,在Python中,所有類都繼承自object,所以任何實例都會是object的實例,本文給大家介紹python中判斷類型函數(shù)isinstance(),感興趣的朋友一起看看吧
    2024-10-10
  • Jupyter Notebook打開任意文件夾操作

    Jupyter Notebook打開任意文件夾操作

    這篇文章主要介紹了Jupyter Notebook打開任意文件夾操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python OpenCV圖像的位運算操作

    Python OpenCV圖像的位運算操作

    位運算是計算機科學中一種基礎(chǔ)而高效的操作,它直接對二進制位進行處理,在圖像處理中,位運算也是一種重要的技術(shù),尤其在圖像的合成、分離、掩模處理等場景中,常常用到位運算,本文將介紹圖像處理中的常見位運算操作,需要的朋友可以參考下
    2024-12-12
  • python使用clear方法清除字典內(nèi)全部數(shù)據(jù)實例

    python使用clear方法清除字典內(nèi)全部數(shù)據(jù)實例

    這篇文章主要介紹了python使用clear方法清除字典內(nèi)全部數(shù)據(jù),實例分析了Python中clear方法清空字典內(nèi)數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 在不同系統(tǒng)間遷移Python程序的方法與教程

    在不同系統(tǒng)間遷移Python程序的方法與教程

    本文介紹了幾種將Windows上編寫的Python程序遷移到Linux服務器上的方法,包括使用虛擬環(huán)境和依賴凍結(jié)、容器化技術(shù)(如Docker)、使用Anaconda環(huán)境以及遠程桌面連接和配置(作為臨時方案),通過這些方法,可以有效地解決環(huán)境搭建和依賴安裝問題
    2025-02-02
  • 在python中計算ssim的方法(與Matlab結(jié)果一致)

    在python中計算ssim的方法(與Matlab結(jié)果一致)

    這篇文章主要介紹了在python中計算ssim的方法(與Matlab結(jié)果一致),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • python實戰(zhàn)之PyQt5實現(xiàn)漫畫臉

    python實戰(zhàn)之PyQt5實現(xiàn)漫畫臉

    本文詳細講解了python實戰(zhàn)之PyQt5實現(xiàn)漫畫臉的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • 用python爬取歷史天氣數(shù)據(jù)的方法示例

    用python爬取歷史天氣數(shù)據(jù)的方法示例

    這篇文章主要介紹了用python爬取歷史天氣數(shù)據(jù)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Python爬蟲庫BeautifulSoup的介紹與簡單使用實例

    Python爬蟲庫BeautifulSoup的介紹與簡單使用實例

    BeautifulSoup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫,本文為大家介紹下Python爬蟲庫BeautifulSoup的介紹與簡單使用實例其中包括了,BeautifulSoup解析HTML,BeautifulSoup獲取內(nèi)容,BeautifulSoup節(jié)點操作,BeautifulSoup獲取CSS屬性等實例
    2020-01-01

最新評論

军事| 蓝山县| 河源市| 五大连池市| 安福县| 渑池县| 中西区| 潮安县| 宜都市| 沈丘县| 邓州市| 化德县| 正蓝旗| 曲阜市| 平安县| 通榆县| 陈巴尔虎旗| 延长县| 襄樊市| 德阳市| 密云县| 台州市| 醴陵市| 五大连池市| 互助| 济宁市| 合肥市| 浠水县| 临西县| 桦南县| 武清区| 临夏县| 武功县| 昌宁县| 青浦区| 云和县| 永川市| 泾川县| 巢湖市| 正阳县| 长沙市|