国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

爬蟲(chóng)技術(shù)在科技圖書館網(wǎng)絡(luò)信息采集中的應(yīng)用

2024-06-03 00:00:00段宏嘉
圖書館學(xué)刊 2024年3期
關(guān)鍵詞:信息采集爬蟲(chóng)信息服務(wù)

[摘 要]以核工業(yè)西南物理研究院圖書館的學(xué)術(shù)新聞信息采集工作為例,介紹了PyCharm軟件、requests庫(kù)和lxml庫(kù)的使用方法及爬蟲(chóng)技術(shù)的使用步驟,列舉3個(gè)具有參考性的新聞信息采集應(yīng)用案例,旨在方便科研人員全面且及時(shí)地掌握信息。

[關(guān)鍵詞]爬蟲(chóng) 科技圖書館 圖書館信息 信息服務(wù) 信息采集

[分類號(hào)]G250.73

互聯(lián)網(wǎng)的發(fā)展拓寬了圖書館的館藏類型,使得其采集對(duì)象從紙質(zhì)印刷文獻(xiàn)載體擴(kuò)展到網(wǎng)絡(luò)信息資源(即通過(guò)互聯(lián)網(wǎng)發(fā)布、傳遞和儲(chǔ)存的文獻(xiàn)信息資源的綜合,也稱網(wǎng)絡(luò)文獻(xiàn)[1]),網(wǎng)絡(luò)學(xué)術(shù)新聞信息則指的是發(fā)布在互聯(lián)網(wǎng)上具有學(xué)術(shù)研究參考價(jià)值的信息資源,對(duì)科研單位科技圖書館的讀者具有重要意義。該類讀者與高校圖書館和公共圖書館的讀者有所不同,科研單位的讀者以科研人員為主,對(duì)某一研究領(lǐng)域的最新研發(fā)動(dòng)態(tài)和科研進(jìn)展都有更大的需求。因此,科技圖書館應(yīng)開(kāi)展網(wǎng)絡(luò)學(xué)術(shù)新聞信息的采集工作,為讀者采集有關(guān)最新科研進(jìn)展動(dòng)態(tài)的學(xué)術(shù)新聞,從而方便后期為其提供便捷的學(xué)術(shù)新聞信息服務(wù)。

不同研究領(lǐng)域的讀者往往具有不同的網(wǎng)絡(luò)學(xué)術(shù)新聞信息需求。核工業(yè)西南物理研究院(以下簡(jiǎn)稱“核西物院”)圖書館的采集工作主要服務(wù)于核西物院的科研人員,因此采集的對(duì)象主要是核聚變(以下簡(jiǎn)稱“聚變”)相關(guān)的學(xué)術(shù)新聞信息。由于互聯(lián)網(wǎng)資源更新速度快且與聚變研究相關(guān)的網(wǎng)頁(yè)數(shù)量大,人工手動(dòng)在幾十個(gè)聚變研究機(jī)構(gòu)的官網(wǎng)和綜合新聞網(wǎng)站上采集新聞費(fèi)時(shí)費(fèi)力,且容易出現(xiàn)關(guān)鍵新聞信息錯(cuò)漏的問(wèn)題。利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)可快速?gòu)拇罅康木圩兿嚓P(guān)網(wǎng)站上獲取學(xué)術(shù)新聞信息,網(wǎng)絡(luò)爬蟲(chóng)能夠按照事先編寫好的程序腳本,對(duì)目標(biāo)數(shù)據(jù)進(jìn)行批量采集[2]。定期采集大量網(wǎng)頁(yè)內(nèi)容并進(jìn)行存檔以供人們使用是運(yùn)用網(wǎng)絡(luò)爬蟲(chóng)的一個(gè)重要目的[3]。利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的自動(dòng)機(jī)器采集代替人工手動(dòng)采集,不僅能將核西物院圖書館工作人員從重復(fù)且機(jī)械的工作中解脫出來(lái),還能更及時(shí)、全面地實(shí)現(xiàn)網(wǎng)絡(luò)學(xué)術(shù)新聞信息的采集,為信息的開(kāi)發(fā)工作打下基礎(chǔ)。

在以往的研究中,圖書館利用爬蟲(chóng)技術(shù)的采集對(duì)象主要有圖書信息[2,4-5]、網(wǎng)絡(luò)期刊文獻(xiàn)信息[2,4-6]和慕課免費(fèi)數(shù)字資源信息[7],采集方法主要涉及主題爬蟲(chóng)法[5-8]、八爪魚(yú)爬蟲(chóng)法[2]和對(duì)python的json庫(kù)、requests庫(kù)和BeautifulSoup4庫(kù)的使用[4]。這些方法都不太適用于圖書館的學(xué)術(shù)新聞信息采集工作。首先,主題爬蟲(chóng)不夠精準(zhǔn),因?yàn)樵摲椒〞?huì)通過(guò)事先設(shè)定好的主題詞采集到許多與學(xué)術(shù)新聞無(wú)關(guān)的內(nèi)容。其次,八爪魚(yú)爬蟲(chóng)法不夠靈活,因?yàn)榕廊⌒侣剷r(shí),常會(huì)遇到新聞超鏈接不全的問(wèn)題,而八爪魚(yú)爬蟲(chóng)軟件無(wú)法判斷其完整性,也無(wú)法自動(dòng)補(bǔ)全鏈接。最后,Python的BeautifulSoup4庫(kù)比起lxml庫(kù)的使用方法更復(fù)雜,需要程序編寫者自己思考并編寫出爬取目標(biāo)的路徑代碼,不像lxml庫(kù)中的xpath方法那樣可以通過(guò)開(kāi)發(fā)者模式直接復(fù)制目標(biāo)的路徑代碼。

筆者利用Python的requests庫(kù)和lxml庫(kù)對(duì)網(wǎng)絡(luò)學(xué)術(shù)新聞信息進(jìn)行采集,補(bǔ)充了圖書館使用爬蟲(chóng)技術(shù)的采集對(duì)象,并提供了更精確、靈活、簡(jiǎn)便的采集方法。Python是一種可以用于網(wǎng)絡(luò)爬蟲(chóng)的程序設(shè)計(jì)語(yǔ)言,它所提供的第三方庫(kù)requests和lxml可以對(duì)網(wǎng)頁(yè)進(jìn)行處理。采集人員只需使用程序語(yǔ)言Python3.8,在集成開(kāi)發(fā)環(huán)境PyCharm中導(dǎo)入requests庫(kù)和lxml庫(kù),編寫相應(yīng)的爬蟲(chóng)代碼,就能實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)學(xué)術(shù)新聞信息的采集。

1 科技圖書館采集網(wǎng)絡(luò)學(xué)術(shù)新聞信息的重要意義

1.1 便于圖書館提供信息服務(wù)

科研單位科技圖書館的主要服務(wù)對(duì)象是該單位的科研人員。通常這些讀者能通過(guò)期刊類的學(xué)術(shù)文獻(xiàn)了解各自領(lǐng)域的國(guó)內(nèi)外科研動(dòng)態(tài)信息,但幾乎每日都會(huì)更新的網(wǎng)絡(luò)學(xué)術(shù)新聞不僅相對(duì)于紙質(zhì)信息資源的出版速度更快,而且相對(duì)于網(wǎng)絡(luò)電子學(xué)術(shù)期刊(出版周期一般為年刊、季刊、雙月刊、月刊)的發(fā)布頻率更快。因此圖書館可以通過(guò)采集網(wǎng)絡(luò)學(xué)術(shù)新聞信息的方式為讀者提供更新的學(xué)術(shù)信息??萍紙D書館作為科研單位信息資源的匯集地,本身?yè)?dān)負(fù)為讀者提供信息服務(wù)、滿足讀者信息需求的重要責(zé)任。在數(shù)字化的背景下,科技圖書館不僅應(yīng)該提供傳統(tǒng)紙質(zhì)資源的信息服務(wù),更應(yīng)開(kāi)展數(shù)字化網(wǎng)絡(luò)資源的特色信息服務(wù)業(yè)務(wù)。采集網(wǎng)絡(luò)學(xué)術(shù)新聞信息是將學(xué)術(shù)信息及時(shí)共享給科研人員的重要基礎(chǔ)和前提,也便于圖書館為其提供后續(xù)信息服務(wù)。

1.2 有助于記錄學(xué)術(shù)信息資源

網(wǎng)絡(luò)學(xué)術(shù)新聞信息能夠反映每個(gè)國(guó)家或研究機(jī)構(gòu)最新的研究突破和研究進(jìn)展,具有值得記錄的學(xué)術(shù)參考價(jià)值。如不及時(shí)對(duì)其進(jìn)行采集,就會(huì)造成學(xué)術(shù)信息資源的浪費(fèi)。反之,如果科研單位科技圖書館能及時(shí)、全面地采集網(wǎng)絡(luò)學(xué)術(shù)新聞,將有助于記錄科研發(fā)展規(guī)律。網(wǎng)絡(luò)信息記錄反映了某一時(shí)代的發(fā)展和變化[9],網(wǎng)絡(luò)學(xué)術(shù)信息記錄則能反映某一研究領(lǐng)域的發(fā)展和變化。如果圖書館可以采集每個(gè)研究機(jī)構(gòu)官網(wǎng)的新聞發(fā)布日期、新聞標(biāo)題、新聞內(nèi)容等,并按照日期對(duì)新聞信息進(jìn)行排列匯總,就能記錄特定周期內(nèi)特定研究機(jī)構(gòu)的科研發(fā)展規(guī)律,從而為科研人員的選題和研究規(guī)劃提供一定的參考。

2 核西物院圖書館采集網(wǎng)絡(luò)學(xué)術(shù)新聞信息的特殊意義

核西物院是從事聚變能源開(kāi)發(fā)和研究的專業(yè)科研單位,其下屬圖書館屬于眾多科技圖書館中的一個(gè)。核西物院圖書館采集網(wǎng)絡(luò)學(xué)術(shù)新聞信息不僅具有一般科技圖書館采集此類信息的重要信息服務(wù)意義和記錄意義,還具有更特殊的意義。這是因?yàn)槠淙后w主要由聚變領(lǐng)域的科研人員構(gòu)成,由于這一科研領(lǐng)域的特殊性,他們往往較難從國(guó)內(nèi)外的相關(guān)新聞網(wǎng)站上獲取到有價(jià)值的信息。核西物院圖書館采集網(wǎng)絡(luò)學(xué)術(shù)新聞信息有助于解決讀者面臨的特殊問(wèn)題,從而方便其及時(shí)且全面地掌握前沿科研信息,提高獲取此類信息的效率。

2.1 可供讀者及時(shí)且全面掌握前沿科研信息

國(guó)內(nèi)缺少專門針對(duì)聚變研究的綜合新聞網(wǎng)站,且新聞網(wǎng)站的國(guó)際聚變新聞存在更新速度慢、素材不全的問(wèn)題。目前國(guó)內(nèi)只有匯集了核聚變新聞和核裂變新聞的核電類新聞網(wǎng)站,如中國(guó)核電信息網(wǎng)和北極星核電網(wǎng)。這些網(wǎng)站的新聞都來(lái)源于對(duì)國(guó)內(nèi)核電新聞的轉(zhuǎn)載和對(duì)國(guó)際新聞的翻譯。國(guó)際新聞的語(yǔ)言特點(diǎn),使得其發(fā)布程序增加了人工翻譯和校對(duì)的過(guò)程。此外,可能因?yàn)榻刂聊壳埃嬲龑?shí)現(xiàn)商用的核電站都是核裂變電站,所以這些網(wǎng)站更關(guān)注裂變新聞。以上兩個(gè)原因?qū)е聡?guó)際聚變新聞更新較慢、內(nèi)容不全。以2022年9月中國(guó)核電信息網(wǎng)的國(guó)際核訊版塊為例,其中國(guó)際核電新聞共有79條,而國(guó)際聚變新聞僅有兩條,并且這兩條新聞都不能體現(xiàn)聚變研究進(jìn)展。然而據(jù)筆者不完全統(tǒng)計(jì),經(jīng)篩選后9月較有價(jià)值的國(guó)際聚變新聞至少有16條。這說(shuō)明盡管國(guó)際聚變新聞本身相對(duì)較少,但其真正數(shù)量也比目前國(guó)內(nèi)核電類新聞網(wǎng)站發(fā)布得要多。國(guó)內(nèi)這些網(wǎng)站沒(méi)有對(duì)大部分國(guó)際聚變新聞進(jìn)行收集、翻譯和發(fā)布。

考慮以上因素,聚變領(lǐng)域的讀者很難及時(shí)、直接地通過(guò)國(guó)內(nèi)的綜合新聞網(wǎng)站較全面地了解聚變相關(guān)科研進(jìn)展。因此圖書館采集聚變相關(guān)的網(wǎng)絡(luò)學(xué)術(shù)新聞能夠彌補(bǔ)當(dāng)前國(guó)內(nèi)對(duì)國(guó)際聚變新聞匯集的不足,可供讀者及時(shí)且全面地掌握相關(guān)科研進(jìn)展。

2.2 提高讀者獲取前沿科研信息的效率

國(guó)際聚變相關(guān)新聞網(wǎng)站數(shù)量過(guò)于龐大,導(dǎo)致讀者無(wú)法快速篩選出有價(jià)值的信息,因此核西物院圖書館采集相關(guān)學(xué)術(shù)新聞信息,有助于為后續(xù)的信息篩選、翻譯、共享工作打下基礎(chǔ),從而為讀者節(jié)省時(shí)間。據(jù)《2022年全球聚變行業(yè)》報(bào)告不完全統(tǒng)計(jì),全球自1992年起已成立了32家聚變研究機(jī)構(gòu)(除中國(guó)外)[10],因此相應(yīng)存在許多機(jī)構(gòu)官網(wǎng)的新聞版塊(子網(wǎng)站)。其他新聞網(wǎng)站還包括1992年前就已成立的權(quán)威聚變研究機(jī)構(gòu)官網(wǎng)的新聞版塊,如英國(guó)原子能管理局(1954年)、美國(guó)通用原子能公司(1955年)、德國(guó)馬克斯·普朗克等離子體物理研究所(1960年)、日本國(guó)立核聚變科學(xué)研究所(1989年)官網(wǎng)的新聞版塊等。另外還有一些綜合類新聞網(wǎng)站,包括英國(guó)國(guó)際核工程網(wǎng)(Nuclear Engineering International)、世界核新聞網(wǎng)(World Nuclear News)、國(guó)際熱核試驗(yàn)堆新聞網(wǎng)(ITER Newsline)等。

總之,國(guó)際聚變相關(guān)新聞網(wǎng)站具有數(shù)量龐大的特點(diǎn),而平常忙于實(shí)驗(yàn)研究、數(shù)據(jù)模擬、數(shù)據(jù)分析、設(shè)備調(diào)試等工作的核西物院讀者,無(wú)法將太多時(shí)間花費(fèi)在對(duì)不定期更新的海量新聞網(wǎng)站的檢索收集上。因此,圖書館采集上述新聞信息對(duì)讀者提高獲取前沿科研信息效率具有重要意義。

3 爬蟲(chóng)技術(shù)的使用方法與步驟

3.1 PyCharm軟件的使用方法

PyCharm是一個(gè)專門用于開(kāi)發(fā)Python程序的集成開(kāi)發(fā)環(huán)境(編程軟件),具有代碼編輯、代碼分析、語(yǔ)法高亮等功能[11]。爬取新聞信息的第一步是利用該軟件安裝爬蟲(chóng)需要的requests庫(kù)和lxml庫(kù)。通過(guò)點(diǎn)擊該軟件底部的terminal命令模式、輸入“pip install requests”、回車后輸入“pip install lxml”、再按回車,就能實(shí)現(xiàn)兩個(gè)庫(kù)的安裝。安裝好后即可在該軟件中進(jìn)行代碼的編寫。使用該軟件的另一目的,是方便圖書館工作人員直接點(diǎn)擊爬取到的新聞超鏈接,從而進(jìn)行對(duì)新聞原網(wǎng)頁(yè)的訪問(wèn)。這是為了解決不利用任何軟件,直接在Windows系統(tǒng)中使用CMD命令提示符打開(kāi)并運(yùn)行Python文件時(shí),點(diǎn)擊超鏈接不跳轉(zhuǎn)的問(wèn)題。

3.2 requests庫(kù)的使用方法

requests庫(kù)是Python的第三方庫(kù),主要用于網(wǎng)頁(yè)請(qǐng)求和網(wǎng)頁(yè)爬蟲(chóng)。該庫(kù)中與爬取聚變新聞信息相關(guān)的函數(shù)是requests.get(url,headers,verify)函數(shù)。其中url用于向?qū)?yīng)的新聞網(wǎng)頁(yè)服務(wù)器發(fā)送請(qǐng)求,作為請(qǐng)求頭的headers用于偽裝成瀏覽器進(jìn)行網(wǎng)頁(yè)訪問(wèn),verify則用于避免所爬取的網(wǎng)頁(yè)因驗(yàn)證書錯(cuò)誤而出現(xiàn)信息報(bào)錯(cuò)問(wèn)題。雖然信息報(bào)錯(cuò)不會(huì)影響爬蟲(chóng)程序的正常運(yùn)行,但是,它會(huì)在爬取內(nèi)容中顯示一些警告信息破壞爬取數(shù)據(jù)的美觀性。通過(guò)將verify參數(shù)設(shè)置成False可以取消驗(yàn)證,從而使得爬取到的信息更干凈整潔。隨后使用response=requests.get()函數(shù)來(lái)封裝所請(qǐng)求的聚變新聞網(wǎng)頁(yè)源代碼數(shù)據(jù),并返回網(wǎng)頁(yè)源代碼、保存為response對(duì)象。最后通過(guò)該庫(kù)的text方法將response對(duì)象轉(zhuǎn)化成字符串格式。

3.3 lxml庫(kù)的使用方法

lxml庫(kù)同樣也是Python的第三方庫(kù),可用于網(wǎng)頁(yè)爬蟲(chóng),亦可解析HTML文檔,即一種以超文本標(biāo)記語(yǔ)言提供網(wǎng)頁(yè)信息的文檔。該庫(kù)中與新聞網(wǎng)頁(yè)信息采集相關(guān)的函數(shù)是html=etree.HTML()。首先通過(guò)etree.HTML()將字符串格式的response對(duì)象轉(zhuǎn)化為HTML文檔,從而構(gòu)造一個(gè)xpath可解析的對(duì)象,再將其保存為html對(duì)象。

xpath是一種能夠在HTML文檔中查找信息的語(yǔ)言,可以對(duì)文檔中的元素和屬性進(jìn)行定位和爬取。其大致操作方法如下:選擇任意一個(gè)與聚變研究相關(guān)的權(quán)威機(jī)構(gòu)官網(wǎng)或綜合新聞網(wǎng),從中打開(kāi)聚變研究進(jìn)展新聞版塊所在的網(wǎng)頁(yè)頁(yè)面,在Chrome瀏覽器中點(diǎn)擊F12鍵,調(diào)出網(wǎng)頁(yè)開(kāi)發(fā)者模式,再使用快捷鍵“Ctrl+shift+c”進(jìn)入元素選擇模式。值得注意的是,大部分網(wǎng)頁(yè)上會(huì)羅列多條新聞,而單條新聞的所有信息(包含新聞發(fā)布日期、超鏈接、標(biāo)題、摘要和圖片等)一般呈現(xiàn)在一個(gè)單獨(dú)可選中的版塊上。用鼠標(biāo)選中該版塊,元素頁(yè)面上就會(huì)自動(dòng)定位到這些信息所在的路徑,再通過(guò)右鍵復(fù)制(點(diǎn)擊copy xpath)就可以得到該條新聞信息的xpath路徑(節(jié)點(diǎn))。通過(guò)元素選擇模式點(diǎn)擊前3條新聞信息版塊,會(huì)發(fā)現(xiàn)其xpath路徑的共同特點(diǎn)。以美國(guó)通用原子公司新聞網(wǎng)頁(yè)為例,前3條新聞信息版塊的xpath路徑依次為:

/html/body/div[2]/div/div/div/main/div/div[2]/div/ul/li[1]

/html/body/div[2]/div/div/div/main/div/div[2]/div/ul/li[2]

/html/body/div[2]/div/div/div/main/div/div[2]/div/ul/li[3]

其中方括號(hào)里的數(shù)字表示的是括號(hào)前元素的序號(hào),比如li[2]表示第二個(gè)li元素。對(duì)比后發(fā)現(xiàn)前3條新聞xpath路徑的唯一區(qū)別是li[]中的數(shù)字。將li后的方括號(hào)及數(shù)字刪除,則會(huì)得到一個(gè)包含所有新聞信息版塊的路徑。使用html.xpath()函數(shù),將路徑插入圓括號(hào)內(nèi),就能得到一個(gè)包含了每條新聞信息版塊的路徑列表(保存為first_list對(duì)象)。利用for first in first_list函數(shù)將該列表進(jìn)行遍歷循環(huán),每次循環(huán)都會(huì)從first_list列表中“取得一個(gè)元素”(一條新聞版塊的路徑)賦予first,并執(zhí)行一次代碼塊,直到列表中的所有元素都執(zhí)行了代碼塊后結(jié)束[11]。同時(shí)使用first.xpath()函數(shù)來(lái)獲取每條新聞的發(fā)布日期、超鏈接及標(biāo)題等信息。具體實(shí)現(xiàn)方式根據(jù)網(wǎng)站不同略有差異,可通過(guò)text()方法來(lái)獲取節(jié)點(diǎn)中所需的文字內(nèi)容,亦可使用“@”獲取該節(jié)點(diǎn)下的某條屬性內(nèi)容。最后將匯總到的新聞信息輸出至屏幕。

3.4 爬蟲(chóng)技術(shù)的使用步驟

整個(gè)爬蟲(chóng)步驟大致為:(1)在PyCharm軟件中創(chuàng)建一個(gè)新的Python文件,并在該文件中導(dǎo)入requests庫(kù)和lxml庫(kù)。(2)選擇任意一個(gè)與聚變研究相關(guān)的權(quán)威機(jī)構(gòu)官網(wǎng)或綜合新聞網(wǎng),從中找到聚變研究進(jìn)展新聞版塊所在的網(wǎng)頁(yè)頁(yè)面,從而確定需要爬取的url(網(wǎng)址)。(3)利用用戶代理使服務(wù)器能夠識(shí)別用戶的操作系統(tǒng)版本、瀏覽器版本、CPU類型等,以便偽裝成瀏覽器進(jìn)行網(wǎng)頁(yè)訪問(wèn)。(4)通過(guò)requests庫(kù)中的requests.get()函數(shù)獲取新聞網(wǎng)頁(yè)(url)源代碼。(5)通過(guò)lxml庫(kù)的etree.HTML()函數(shù)將字符串格式的網(wǎng)頁(yè)源代碼轉(zhuǎn)化成xpath可解析的HTML文檔。(6)確定需爬取的目標(biāo)信息,如新聞發(fā)布時(shí)間、超鏈接和標(biāo)題。(7)分析目標(biāo)新聞網(wǎng)頁(yè)的網(wǎng)頁(yè)源代碼,利用xpath方法定位并復(fù)制任意一條新聞信息版塊(包含新聞發(fā)布日期、超鏈接、標(biāo)題、摘要和圖片等)的xpath路徑。(8)對(duì)比2~3條新聞信息版塊的路徑,找到規(guī)律,歸納出能夠包含每條新聞信息版塊的路徑列表。(9)利用xpath()函數(shù)爬取該列表。(10)利用for…in函數(shù)將該列表進(jìn)行遍歷循環(huán),并且使用xpath()函數(shù)爬取列表中每條新聞的發(fā)布日期、超鏈接及標(biāo)題等信息。(11)使用print()函數(shù)和join()函數(shù)輸出干凈、整潔的新聞信息。

4 科技圖書館學(xué)術(shù)新聞采集案例應(yīng)用

核西物院科技圖書館利用爬蟲(chóng)技術(shù)采集聚變相關(guān)學(xué)術(shù)新聞信息是為了方便工作人員及時(shí)捕捉最新的新聞,從而進(jìn)行篩選、翻譯或轉(zhuǎn)載,最終上傳到單位的網(wǎng)站上。該目的決定了爬取目標(biāo)的范圍應(yīng)包括新聞發(fā)布日期、超鏈接和標(biāo)題。爬取新聞發(fā)布日期有利于圖書館工作人員快速判斷新聞的時(shí)效性,爬取新聞超鏈接便于工作人員快速訪問(wèn)新聞原頁(yè)面、瀏覽新聞內(nèi)容,爬取新聞標(biāo)題則有助于工作人員判斷新聞的相關(guān)性與重要性。其他圖書館的工作人員可以按照各自的目的,自行調(diào)整爬取目標(biāo)。

筆者列舉了3個(gè)具有參考性的爬蟲(chóng)應(yīng)用案例。其中案例一列舉了最典型的新聞信息爬蟲(chóng)代碼,所有新聞網(wǎng)站的爬蟲(chóng)代碼都可以此為基礎(chǔ);案例二和案例三列舉了爬取新聞時(shí)的常見(jiàn)問(wèn)題、解決方案(相應(yīng)代碼的修改方式)和具體代碼。

4.1 案例一

一些聚變新聞網(wǎng)頁(yè)源代碼較標(biāo)準(zhǔn)、易爬取,因而以這類網(wǎng)頁(yè)為爬取目標(biāo)寫出的爬蟲(chóng)核心代碼也較標(biāo)準(zhǔn)、適用范圍廣。其他新聞網(wǎng)頁(yè)的代碼只需在此類代碼上進(jìn)行靈活修改即可。筆者以網(wǎng)頁(yè)源代碼較標(biāo)準(zhǔn)的歐洲聚變能組織(F4E)的新聞網(wǎng)頁(yè)作為爬取案例。其核心代碼如下:

import requests #導(dǎo)入request庫(kù)

from lxml import etree #導(dǎo)入lxml庫(kù)中的etree包

url = \"https://fusionforenergy.europa.eu/news/\" #歐洲聚變能組織的新聞網(wǎng)址

headers = {\"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/99.0.4844.82 Safari/537.36\"}#將爬蟲(chóng)身份偽裝成瀏覽器的代理

resp = requests.get(url,headers=headers,verify=False) #獲取并返回網(wǎng)頁(yè)源代碼

html = etree.HTML(resp.text) #先將網(wǎng)頁(yè)源代碼轉(zhuǎn)化為字符串格式,再轉(zhuǎn)化為HTML文檔以便使用xpath函數(shù)

first_list=html.xpath(′/html/body/div[1]/div[2]/section/ma

in/article/div/div[2]/ul/li/div[2]′) #利用xpath方法得出包含爬取目標(biāo)的路徑列表

for first in first_list: #使用for…in循環(huán)從列表中依次取值,賦給first

date= first.xpath(\"div[2]/div[1]/text()\") #獲取路徑節(jié)點(diǎn)第二個(gè)div節(jié)點(diǎn)下、第一個(gè)div節(jié)點(diǎn)下的文本內(nèi)容(新聞發(fā)布日期)

title = first.xpath(\"a/text()\") #獲取路徑節(jié)點(diǎn)a節(jié)點(diǎn)下的文本內(nèi)容(新聞標(biāo)題)

site = first.xpath(\"@href\") #獲取路徑節(jié)點(diǎn)的href屬性內(nèi)容(新聞超鏈接)

print(\"\".join(date),\"\".join(site),\"\".join(title)) #利用join()函數(shù)把獲取的HTML文檔轉(zhuǎn)換成字符串,以使輸出的新聞發(fā)布日期、超鏈接和標(biāo)題內(nèi)容干凈、整潔

resp.close() #爬取完成后關(guān)閉與服務(wù)器的連接

print(\"over\") #輸出over,以便確定爬取過(guò)程結(jié)束

筆者2022年10月12日運(yùn)行程序后,兩秒內(nèi)完成了爬蟲(chóng),爬蟲(chóng)結(jié)果準(zhǔn)確率為100%。其中新聞日期的書寫順序是“日、月、年”。爬蟲(chóng)結(jié)果如圖1所示,由于爬取的標(biāo)題過(guò)長(zhǎng),進(jìn)行了剪裁。

4.2 案例二

爬取新聞網(wǎng)頁(yè)信息時(shí)遇到的常見(jiàn)問(wèn)題之一是爬取的超鏈接不全或部分不全,從而阻礙圖書館工作人員對(duì)其進(jìn)行訪問(wèn)。解決此問(wèn)題的辦法是:(1)對(duì)比爬取的鏈接與原鏈接的區(qū)別,從而確定需補(bǔ)全的url網(wǎng)址。(2)如果爬取的鏈接都不全,則只需在輸出爬取結(jié)果時(shí),利用“+”合并所爬取的鏈接和需補(bǔ)全的鏈接,以得到完整的鏈接。(3)如果爬取鏈接只有部分不全,則使用if-else語(yǔ)句來(lái)判斷爬取的鏈接中是否含有http,若含有,證明爬取鏈接完整,則直接輸出鏈接;如不含有,說(shuō)明“條件測(cè)試未通過(guò)”,則執(zhí)行else的操作,即通過(guò)“+”拼接鏈接[12]。

筆者以日本國(guó)立聚變科學(xué)研究所(NIFS)的新聞網(wǎng)頁(yè)為爬取案例,旨在為遇到此類問(wèn)題的圖書館工作人員提供可參考的解決方法。代碼結(jié)構(gòu)和經(jīng)典案例大致相同,只需針對(duì)鏈接存在的問(wèn)題進(jìn)行部分修改。其核心代碼如下:

import requests

from lxml import etree

url_1 = \"https://www.nifs.ac.jp/en/news/index.html\" #日本國(guó)立聚變科學(xué)研究所新聞版塊的網(wǎng)址

url_2 =\"https://www.nifs.ac.jp/en/news/\" #需補(bǔ)全的鏈接

headers = {\"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/99.0.4844.82 Safari/537.36\"}

resp = requests.get(url_1,headers=headers,verify=False)

html = etree.HTML(resp.text)

first_list=html.xpath(′/html/body/div[1]/div/div[1]/div/div

/section/div[1]/div′)

for first in first_list:

date = first.xpath(\"div/div[2]/div[2]/span/text()\")

site = first.xpath(\"div/div[3]/div/a/@href\")

title= first.xpath(\"div/div[3]/h1/text()\")

if \"http\" in \"\".join(site): #如果鏈接中含有“http”

print(\"\".join(date),\"\".join(site),\"\".join(title))# 直接輸出鏈接

else: #如果鏈接中未含有“http”

print(\"\".join(date),url_2+\"\".join(site),\"\".join(title)) #使用\"+\"合并url_2和site,輸出完整的鏈接

resp.close()

print(\"over\")

筆者2022年10月12日運(yùn)行程序后,兩秒內(nèi)完成了爬蟲(chóng),爬蟲(chóng)結(jié)果準(zhǔn)確率為100%。爬取結(jié)果如圖2所示。

4.3 案例三

爬取新聞網(wǎng)頁(yè)信息時(shí)還會(huì)遇到兩個(gè)常見(jiàn)問(wèn)題:(1)新聞信息版塊里沒(méi)有新聞發(fā)布日期;(2)無(wú)法用同一個(gè)規(guī)律總結(jié)所有新聞信息版塊所在的xpath路徑。

在兩種情況下可以忽略問(wèn)題一:第一,如果整個(gè)網(wǎng)頁(yè)源代碼和新聞網(wǎng)頁(yè)上都缺少新聞發(fā)布日期,則無(wú)法爬??;第二,如果網(wǎng)頁(yè)段代碼里沒(méi)有專門的新聞發(fā)布日期,并且新聞發(fā)布日期是超鏈接的一部分,則無(wú)需爬取。但是如果在該網(wǎng)頁(yè)上的其他版塊能找到新聞發(fā)布日期且只有兩個(gè)發(fā)布日期(匯集新聞的起止日期),則需用xpath方法對(duì)該版塊上的日期進(jìn)行爬取,并且輸出利用“+”合并的起始日期、連字符和終止日期,隔時(shí)段更新的綜合新聞網(wǎng)站往往會(huì)出現(xiàn)該問(wèn)題。

針對(duì)問(wèn)題二的解決方法是:第一,分析網(wǎng)頁(yè)源代碼,找到一條或多條新聞信息所在版塊的xpath路徑(一些網(wǎng)頁(yè)的首條新聞往往獨(dú)占單獨(dú)的版塊且不與其他新聞遵循同一個(gè)xpath路徑規(guī)律);第二,分析路徑規(guī)律,針對(duì)規(guī)律相同的新聞編寫新的路徑列表;第三,利用xpath()函數(shù)爬取所有路徑列表。

綜合新聞網(wǎng)站國(guó)際熱核試驗(yàn)堆新聞網(wǎng)的更新時(shí)間不固定,更新內(nèi)容涵蓋某段起止日期內(nèi)的一些重要科研機(jī)構(gòu)的新聞。其新聞的xpath路徑遵循3種不同的規(guī)律。由于該網(wǎng)頁(yè)存在以上兩個(gè)問(wèn)題,所以筆者以其作為爬取案例。核心代碼如下:

import requests

from lxml import etree

url_1 = \"https://www.iter.org/news/whatsnew\"

url_2 = \"https://www.iter.org\" #需補(bǔ)全的鏈接網(wǎng)址

headers = {\"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/99.0.4844.82 Safari/537.36\"}

resp = requests.get(url_1,headers=headers,verify=False)

html = etree.HTML(resp.text)

date_list=html.xpath(′//*[@id=\"maincontent\"]/div/div/div[1]/blockquote/p′) #新聞起止日期的路徑列表

for date in date_list:

date_start = date.xpath(\"b[1]/text()\") #新聞起始日期

date_end = date.xpath(\"b[2]/text()\") #新聞終止日期

print(\"\".join(date_start),\"-\"+\"\".join(date_end)) #利用“+”合并新聞起始日期、連字符和終止日期

first_list = html.xpath (′//*[@id=\"wn_blocktop\"]/div/div/a′) #新聞路徑列表1

for first in first_list:

site1 = first.xpath(\"@href\")

title1 = first.xpath(\"./div/span/text()\")

print(url_2 + \"\".join(site1),\"\".join(title1))

second_list = html.xpath (′//*[@id=\"wn_blockbottom\"]/div/div/a′) #新聞路徑列表2

for second in second_list:

site2 = second.xpath(\"@href\")

title2 = second.xpath(\"./div/span/text()\")

print(url_2 + \"\".join(site2),\"\".join(title2))

third_list = html.xpath(′//*[@id=\"wn-press\"]/ul/li/div/div[2]/a′) #新聞路徑列表3

for third in third_list:

site3 = third.xpath(\"@href\")

title3 = third.xpath(\"./text()\")

print(\"\".join(site3),\"\".join(title3))

resp.close()

print(\"over\")

2022年10月12日筆者運(yùn)行程序后,3秒左右完成了爬蟲(chóng),爬蟲(chóng)結(jié)果準(zhǔn)確率為100%。爬蟲(chóng)結(jié)果如圖3所示,因圖片太寬,只截取了部分內(nèi)容。

5 結(jié)語(yǔ)

歷經(jīng)3個(gè)多月對(duì)幾十個(gè)程序運(yùn)行情況的跟蹤研究,筆者發(fā)現(xiàn)網(wǎng)頁(yè)源代碼偶爾會(huì)發(fā)生變化,導(dǎo)致爬蟲(chóng)結(jié)果出現(xiàn)問(wèn)題,但只要掌握了Python的requests庫(kù)和lxml庫(kù)的使用方法,就可以快速針對(duì)不同問(wèn)題微調(diào)代碼,解決問(wèn)題。這說(shuō)明不能完全依賴編寫好的程序,而應(yīng)該真正掌握爬蟲(chóng)技術(shù)。經(jīng)過(guò)實(shí)踐還發(fā)現(xiàn),新聞的數(shù)量和爬蟲(chóng)程序的運(yùn)行時(shí)間成正比,新聞數(shù)量越多,爬蟲(chóng)時(shí)間越長(zhǎng)。雖然本身運(yùn)行程序的時(shí)間很短,但還可以進(jìn)一步縮短時(shí)間。如果采集人員每天都有時(shí)間運(yùn)行程序,就可以修改代碼,在新聞路徑列表代碼的右側(cè)添加限制“[:2]”,讓程序只爬取最新的兩條新聞,進(jìn)一步提高效率??傮w而言,該爬蟲(chóng)技術(shù)具有效率高、準(zhǔn)確率高、適用性廣的優(yōu)點(diǎn)。使用爬蟲(chóng)程序后,核西物院圖書館的采集人員只需要記住自己最后一次運(yùn)行程序的日期,以極短的時(shí)間運(yùn)行程序并等待爬蟲(chóng)結(jié)果,在爬取結(jié)果中定位到該日期之后發(fā)布的新聞,可以通過(guò)標(biāo)題或新聞內(nèi)容來(lái)篩選具有價(jià)值的新聞,就能較快速且全面地采集聚變新聞。

綜上所述,通過(guò)掌握爬蟲(chóng)技術(shù)進(jìn)行定期的網(wǎng)絡(luò)學(xué)術(shù)新聞信息收集,核西物院圖書館解決了人工采集不及時(shí)、采集信息不全面的問(wèn)題。未來(lái)在實(shí)踐中,可以根據(jù)不同的需求不斷優(yōu)化程序。如在掌握Python的os庫(kù)后可以直接在一個(gè)程序中運(yùn)行事先為各個(gè)網(wǎng)頁(yè)編寫好的所有程序,一鍵實(shí)現(xiàn)對(duì)幾十個(gè)網(wǎng)頁(yè)的信息采集。

筆者希望通過(guò)核西物院爬取網(wǎng)絡(luò)聚變新聞的個(gè)例,為各類圖書館提供一定的實(shí)踐參考方向。一方面,所有科技圖書館都應(yīng)重視網(wǎng)絡(luò)學(xué)術(shù)新聞的采集工作。無(wú)論是哪個(gè)領(lǐng)域的科研單位,其首要任務(wù)都是進(jìn)行學(xué)術(shù)研究,做研究則離不開(kāi)創(chuàng)新。而沒(méi)有前沿的科研信息支撐,科研人員無(wú)法憑空創(chuàng)新。網(wǎng)絡(luò)學(xué)術(shù)新聞具有更新頻率較快、信息內(nèi)容較前沿等特點(diǎn),能夠?qū)Ω螺^慢的學(xué)術(shù)期刊類文獻(xiàn)做一定的補(bǔ)充,從而有利于科研單位的發(fā)展,因此建議其他領(lǐng)域的科技圖書館加強(qiáng)為其讀者采集網(wǎng)絡(luò)學(xué)術(shù)新聞的重視。另一方面,各類圖書館都可以參照筆者提出的爬蟲(chóng)技術(shù)。該技術(shù)適用范圍廣泛,圖書館不但能通過(guò)該技術(shù)爬取網(wǎng)絡(luò)學(xué)術(shù)新聞網(wǎng)站,還能爬取許多其他信息網(wǎng)站,如圖書信息網(wǎng)站、政府公眾信息網(wǎng)站、統(tǒng)計(jì)類信息網(wǎng)站等。通過(guò)此技術(shù),圖書館可以更快速、全面地獲取各類信息。不僅能為讀者提供更好的服務(wù),而且方便圖書館開(kāi)展圖書采購(gòu)、基金申報(bào)、學(xué)術(shù)研究等其他工作。

參考文獻(xiàn):

[1] 郝麗佳.高校圖書館網(wǎng)絡(luò)學(xué)術(shù)信息資源的開(kāi)發(fā)與利用[J].科技信息,2012(36):198.

[2] 張志勇.高校圖書館利用八爪魚(yú)網(wǎng)絡(luò)爬蟲(chóng)技術(shù)高效采集元數(shù)據(jù)[J].現(xiàn)代信息科技,2019(4):4-6.

[3] Olston C,Najork M.Web crawling[J].Foundations and trends in information retrieval,2010(3):175-246.

[4] 荀雪蓮,姚文彬.大數(shù)據(jù)網(wǎng)絡(luò)爬蟲(chóng)技術(shù)在智慧圖書館信息資源建設(shè)上的應(yīng)用[J].北華航天工業(yè)學(xué)院學(xué)報(bào),2020(4):20-22.

[5] 楊學(xué)明,劉柏嵩.主題爬蟲(chóng)在數(shù)字圖書館中的應(yīng)用[J].圖書館雜志,2007(8):47-50,58.

[6] 何鈞雷.以主題爬蟲(chóng)視角進(jìn)行數(shù)字資源的建設(shè)探析[J].電子技術(shù)與軟件工程,2014(16):17-18.

[7] 宋宇.MOOC背景下從主題爬蟲(chóng)角度看圖書館數(shù)字資源建設(shè)[J].內(nèi)蒙古科技與經(jīng)濟(jì),2018(19):103-104.

[8] 付雅慧.優(yōu)化圖書館數(shù)字化服務(wù)的途徑分析——基于主題爬蟲(chóng)算法[J].蘭臺(tái)內(nèi)外,2020(10):51-53.

[9] 魏大威,季士妍.國(guó)家圖書館網(wǎng)絡(luò)信息資源采集與保存平臺(tái)關(guān)鍵技術(shù)實(shí)現(xiàn)[J].圖書館,2021(3):45-50.

[10] Fusion Industry Association.The global fusion industry in 2022[R].Washington: FIA,2022.

[11] 李寧.Python從菜鳥(niǎo)到高手[M].北京:清華大學(xué)出版社,2018.

[12] 埃里克·馬瑟斯.Python編程:從入門到實(shí)踐[M].北京:人民郵電出版社,2016.

段宏嘉 女,1994年生。碩士,助理館員。研究方向:圖書管理與信息服務(wù)。

(收稿日期:2023-02-22;責(zé)編:鄧鈺。)

猜你喜歡
信息采集爬蟲(chóng)信息服務(wù)
利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
基于Python的網(wǎng)絡(luò)爬蟲(chóng)和反爬蟲(chóng)技術(shù)研究
利用爬蟲(chóng)技術(shù)的Geo-Gnutel la VANET流量采集
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)
電子制作(2017年9期)2017-04-17 03:00:46
如何提高卷煙零售市場(chǎng)信息采集的有效性
公共圖書館科技創(chuàng)新服務(wù)探析
農(nóng)業(yè)高校圖書館專利信息服務(wù)研究
計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)在信息工程中的應(yīng)用
基于價(jià)值共創(chuàng)共享的信息服務(wù)生態(tài)系統(tǒng)協(xié)同機(jī)制研究
科技視界(2016年18期)2016-11-03 22:02:50
電力信息采集系統(tǒng)中對(duì)載波現(xiàn)場(chǎng)測(cè)試儀的應(yīng)用
漠河县| 桐柏县| 隆子县| 三河市| 廊坊市| 汉源县| 白山市| 正镶白旗| 略阳县| 龙游县| 申扎县| 柳林县| 余姚市| 阳春市| 闻喜县| 建德市| 舞阳县| 合川市| 饶平县| 长兴县| 沂源县| 呼伦贝尔市| 晴隆县| 西宁市| 兴隆县| 莎车县| 博野县| 乐都县| 英山县| 安徽省| 麟游县| 长沙县| 祁连县| 宜都市| 高邑县| 电白县| 延边| 大宁县| 龙江县| 济阳县| 大姚县|