日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python批量检索文献_Python+Selenium,让浏览器自动帮你下文献

發布時間:2024/3/26 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python批量检索文献_Python+Selenium,让浏览器自动帮你下文献 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在做學術、搞科研的過程中,我們往往需要針對一個特定的主題下載海量的文獻。在把幾百篇文獻下載到電腦的過程中,假如遇到不夠友好的數據庫不提供批量下載的功能,怎么辦?我恰好遇到了這樣的批量下載的科研任務和批量下載功能受限的數據庫網站……

做了幾天,覺得有點無聊……這個時候,我們多希望自己的瀏覽器可以變得聰明一點,幫我們完成這個無聊又機械的過程。如何讓瀏覽器替我們搬磚呢?萬能的谷歌給我找到了一篇教程python 批量下載知網(CNKI)論文,嗯,使用python+selenium,就把瀏覽器調教成我們想要的樣子,讓它自動幫我們下文獻。感謝前人提供巨人的肩膀!在這篇文章、以及這篇文章作者提供的代碼的基礎上,通過學習和改造,就可以將其適用于外文數據庫。這里以Chrome瀏覽器和SpringLink數據庫為例子進行說明。

一、需求分析

搞科研很重要的一步就是找文獻,其中最基礎的工作是先在特定主題詞下找到文獻。那我們需要瀏覽器做的事情就清楚了,就是幫我們下文獻,特別是海量的文獻。

二、流程分析

我們知道,在輸入主題詞后,下載文獻的過程重重復復就是那幾個步驟:

點擊下載按鈕;

開始下載,下載完成;

回到列表頁面;

點擊下一個文獻,繼續下載;

完成這一個頁面的下載流程后,點擊下一頁,重復上述過程。

這么簡單的流程,為啥不能交給電腦呢?點擊下載按鈕,實質上就是打開下載鏈接,那么我們可以將上述過程簡化為兩步:

獲取所有下載鏈接;

分別點擊每一個下載鏈接進行下載。

三、編程實現

1、Python

編程需要選擇一種編程語言,這里我選擇的語言是簡單、容易上手的Python,本文所有代碼均為Python。關于Python的安裝、使用和語法規則可以參考廖雪峰的Python教程;運行環境我用的是jupytor notebook,關于這個可以參考Jupyter Notebook介紹、安裝及使用教程。這里都不再進行贅述了,因為我也不怎么懂……

2、Selenium

在開始編程之前,我們需要先了解一個能夠自動控制瀏覽器的工具——Selenium。Selenium是一個用于Web應用程序測試的工具,直接運行在瀏覽器中,就像真正的用戶在操作一樣。

安裝和啟動,我覺得比較好的、能用的參考資料是selenium webdriver 啟動三大瀏覽器Firefox,Chrome,IE、Python爬蟲環境常用庫安裝等。注意一定要根據自己的瀏覽器下載瀏覽器驅動,我用的是Chrome瀏覽器,需要先看好自己的自己瀏覽器的版本,具體方法是在導航欄輸入chrome://version/,我的版本是70.0.3538。

在解壓、安裝完成后,需要把這個.exe放到python的lib文件夾,我的文件夾路徑是:F:\SOFTWARE\Anaconda3\Library\bin。之后,使用如下代碼測試是否Selenuim能用。

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")

3、網站分析

接下來,分析網站結構。我們發現,在SpringerLink數據庫中,只要有權限,點擊Download PDF就可以下載。那么我們只要把這些鏈接獲取到,就可以實現批量下載。

一般按F12可以進入瀏覽器的開發者工具,選取這個元素,發現還真是。

之后,我們選取“下一頁”的元素。

4、閱讀文檔

在Selenium中文文檔中,我們可以看到要實現我們的想法,需要什么命令。主要用的部分列舉如下:

1)等待頁面加載完成

等待頁面加載完成(Waits)可以分為顯式等待和隱式等待。顯式等待就像我們等網頁加載好再操作一樣,瀏覽器等待網頁加載完再進行操作。

#顯式等待

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()

driver.get("http://somedomain/url_that_delays_loading")

try:

element = WebDriverWait(driver, 10).until(

EC.presence_of_element_located((By.ID, "myDynamicElement"))

)

finally:

driver.quit()

2)查找元素

經過分析,本次編程使用到的元素主要是,css選擇器主要是class和id,那么可以通過xpath、class_name、id_name、css_selector等方式查找元素。代碼如下:

driver.find_element_by_xpath("//form[@id='loginForm']")

driver.find_elements(By.XPATH, '//button')

driver.find_element_by_class_name('content')

driver.find_element_by_id('loginForm')

driver.find_element_by_css_selector('p.content')

3)點擊效果

要實現點擊效果,只需要在查找的元素之后,加上.click()。

#例如

driver.find_element_by_xpath("//form[@id='loginForm']").click()

5、編程過程

首先,是要引進我們用到的庫。

import os

from time import sleep

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

按照我們設計的流程編寫程序的主干部分,涉及到具體函數先編個名字取代。

if __name__ == "__main__":

#1、初始化

browser = browser_init(True)

openPage(browser)

paper_downloadLinks = []

#2、翻頁,批量選取鏈接

pageNum = 10

curPage = 1

while curPage < pageNum:

switchNextPage(browser)

get_download_page(browser,paper_downloadLinks)

print("第%d頁"% curPage)

curPage += 1

browser.quit()

print("采集了%d條數據"% len(paper_downloadLinks))

#3、下載

driver=browser_init(False)

fail_downLoadUrl=[]

do_download(driver,paper_downloadLinks,fail_downLoadUrl)

具體函數如下:

def browser_init(isWait):

options = webdriver.ChromeOptions()

prefs = {

'profile.default_content_settings_popups': 0,

'download.default_directory': 'F:/desktop_data/元分析文獻數據/wiley'

}

options.add_experimental_option('prefs', prefs)

browser = webdriver.Chrome()

if isWait:

browser.implicitly_wait(10)

return browser

def openPage(browser):

browser.get("https://link.springer.com/search?just-selected-from-overlay-value=%22Education%22&date-facet-mode=between&just-selected-from-overlay=facet-discipline&facet-start-year=2018&query=high+education&facet-discipline=%22Education%22&facet-end-year=2019&facet-content-type=%22Article%22")

def get_download_page(browser, paper_downloadLinks):

for link in browser.find_elements_by_css_selector('a[href^=\/content\/pdf]'):

dlink=link.get_attribute('href')

url = dlink

paper_downloadLinks.append(url)

def switchNextPage(browser):

browser.find_element(By.XPATH, '//a[@class="next"]').click()

def do_download(driver,urls,fail_downLoadUrl):

for url in urls:

print(url)

try:

sleep(5)

driver.get(url)

print("download success")

except Exception as e:

print("download fail")

fail_downLoadUrl.append(url)

四、結果

嗯,寫好代碼之后,就該干嘛干嘛,讓Chrome自動幫你下載文獻吧,中間可以打把游戲什么的(逃)。python基礎不扎實改編個現成的代碼都顯得吃力,嗯……我需要提高的地方還有很多。希望這篇文章能夠幫到同在學術半道上的你。

結果演示

總結

以上是生活随笔為你收集整理的python批量检索文献_Python+Selenium,让浏览器自动帮你下文献的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品无码999 | 国产亚洲一区在线 | 一个色av | 亚洲播播| 亚洲国产成人一区二区精品区 | 2023av在线 | 成人免费视频国产在线观看 | www.在线观看麻豆 | 毛片网| 成人片网址 | 国产香蕉尹人视频在线 | 免费黄色三级网站 | 久久这里只有精品23 | 国产中文字幕亚洲 | 日韩av中文字幕在线播放 | 九九午夜| 国产盗摄一区二区三区在线 | 国产5区 | 高潮毛片无遮挡 | 日本wwwwww | 少妇特殊按摩高潮惨叫无码 | 亚洲色妞 | 制服下的诱惑暮生 | 亚色中文字幕 | 婷婷狠狠爱 | 东北高大丰满bbbbzbbb | 久久久黄色片 | 亚洲成人动漫在线观看 | 中文字幕免费一区二区 | 欧美大片高清 | 精品香蕉一区二区三区 | 久久理论视频 | 国产真实自拍 | 探花国产| 神马午夜在线 | 麻豆久久精品 | 欧美黄页| 女生被男生c | 男女日批视频 | 国精产品一区一区三区mba下载 | 色资源av| 中文字幕理论片 | 日本老少交| 免费国产小视频 | 素人一区二区三区 | 午夜亚洲福利在线老司机 | 一区二区视频在线观看免费 | 久久精品2019中文字幕 | 噼里啪啦高清 | 德国性猛交xxxxhd | 中文字幕人妻丝袜乱一区三区 | 欧美性猛烈 | 亚洲视频在线播放免费 | 日韩男女啪啪 | 一区二区午夜 | www.猫咪av| 一区二区三区天堂 | 日本成人免费在线 | 丰腴饱满的极品熟妇 | 男女午夜网站 | 轮番上阵免费观看在线电影 | 简单av网 | 高清性爱视频 | av激情影院| 黄色a网| 国产精品无码免费在线观看 | 中国精品久久 | 大屁股白浆一区二区 | 成人av影院在线观看 | 日韩一区二区三区在线播放 | 久热中文| 欧洲精品久久 | 成人在线观看av | 成人禁污污啪啪入口 | 天天射日日射 | 国产精品69久久久久孕妇欧美 | 性感美女一区 | 精品美女一区 | 中日韩黄色大片 | 欧美成人一级视频 | 国产成人无码av在线播放dvd | 欧美另类人妖 | 日韩一区二区三区免费 | 99热这里只有精品首页 | 日本亚洲在线 | 国产不卡视频在线观看 | 国产亚洲欧美一区二区 | 欧美偷拍少妇精品一区 | 妺妺窝人体色www聚色窝仙踪 | 国产高潮自拍 | 韩国黄色一级片 | 好吊色视频在线观看 | 久久久久1| 欧美日韩亚洲国产精品 | h视频网站在线观看 | 91在线免费观看网站 | 无码人妻丰满熟妇啪啪网站 | www精品视频 | 久久综合久久久久 |