爬蟲:用selenium 爬取知網(wǎng)文獻(xiàn)基本信息

前幾天有個小伙伴讓我?guī)退麑憘€代碼梦碗,要求如下:

  • 爬取知網(wǎng)文獻(xiàn)
  • 檢索條件:學(xué)科類別勾選“社會科學(xué)一輯”所有“法學(xué)”類;
  • 文獻(xiàn)類型“期刊”制跟,來源“cssci”铜邮,時間不限
  • 主題詞“地下空間”

我嘗試了一下仪召,電腦版搞不定(應(yīng)該是我水平差),但是手機(jī)版松蒜,可以簡單實(shí)現(xiàn)這個功能

功能介紹

流程:

  • selenium (瀏覽器自動化測試框架)打開瀏覽器
  • 輸入檢索關(guān)鍵詞地下空間
  • 篩選文獻(xiàn)扔茅,把期刊來源設(shè)置為cssci
  • 篩選學(xué)科(這部分后面再補(bǔ)充)
  • 讀取文獻(xiàn)總數(shù)量,加載所有頁面
  • 讀取每篇文獻(xiàn)的標(biāo)題秸苗、 作者召娜、 摘要來源惊楼、引用玖瘸、鏈接
  • 保存成Excel文件
匯總成Excel

準(zhǔn)備工作

在開始寫代碼之前,要保證兩點(diǎn):
1檀咙、你有Python的軟件雅倒,安裝好selenium 的庫了
2、安裝對應(yīng)的瀏覽器驅(qū)動

Python的安裝你可以點(diǎn)這里 Python程序的安裝和運(yùn)行

安裝selenium 也很簡單弧可,在附件—>命令提示符 打開窗口蔑匣,輸入pip install selenium

關(guān)于安裝對應(yīng)的瀏覽器驅(qū)動,以 Chrome 瀏覽器棕诵,點(diǎn)擊右上角點(diǎn)點(diǎn)點(diǎn)的那個符號裁良,選擇幫助 - 關(guān)于 Google Chrome

可以看到瀏覽器的版本號,然后我們?nèi)ハ螺d一個驅(qū)動

版本號

打開 https://npm.taobao.org/mirrors/chromedriver 校套,選擇一個和你版本比較接近的安裝文件

我是Windows系統(tǒng)趴久,所以我下載chromedriver_win32.zip

下載之后,把這個文件解壓搔确,里面只有一個.exe后綴的驅(qū)動文件。把它剪切到 Python 安裝目錄的 Scripts 文件夾里。

怎么找到 Python 的安裝目錄膳算,你可以在附件—>命令提示符 座硕,打開命令提示符,輸入where python涕蜂。比如我的安裝目錄华匾,在C盤下面

開始干活

selenium是個很神奇的東西,它可以幫你模擬瀏覽器的操作

先把庫都放進(jìn)來

from selenium import webdriver   # selenium用于打開瀏覽器
import  time  # 把關(guān)于時間的庫加進(jìn)來机隙,這個是系統(tǒng)自帶的
import xlwt  # 這個庫是為了后面保存Excel

把瀏覽器打開蜘拉,用time.sleep人為的暫停一會,速度太快了自己都看不清操作~

browser = webdriver.Chrome()
# 打開博客
browser.get('http://wap.cnki.net/touch/web/guide')
time.sleep(0.3)

進(jìn)入搜索有鹿,輸入主題旭旭。可以根據(jù)ID搜索葱跋,也可以根據(jù)class搜索

topic = "地下空間"
browser.find_element_by_id('btnSearch').click()
browser.find_element_by_id('keyword_ordinary').send_keys(topic)
browser.find_element_by_class_name('btn-search').click()
time.sleep(0.3)
輸入主題詞
點(diǎn)擊搜索

篩選文獻(xiàn)持寄,把期刊來源勾選為“cssci”

browser.find_element_by_id("articletype_a").click()
time.sleep(0.3)
browser.find_element_by_css_selector("a[data-value=\"14\"]").click()
勾選期刊

獲取文獻(xiàn)數(shù)量

num = browser.find_element_by_class_name('search-number').text
num = int(num[:-1])
獲取文獻(xiàn)數(shù)量

加載所有頁面

for i in range(int(num/10)):
    browser.find_element_by_class_name('c-company__body-item-more').click()
    time.sleep(0.3)
加載所有頁面

獲取文獻(xiàn)信息

title = browser.find_elements_by_class_name('c-company__body-title')
author = browser.find_elements_by_class_name('c-company__body-author')
link = browser.find_elements_by_class_name('c-company-top-link')
content = browser.find_elements_by_class_name('c-company__body-content')
company = browser.find_elements_by_class_name('color-green')
info = browser.find_elements_by_class_name('c-company__body-info')
獲取文獻(xiàn)信息

保存到Excel

# 定義保存Excel的位置
workbook = xlwt.Workbook()  #定義workbook
sheet = workbook.add_sheet(topic)  #添加sheet
head = ['標(biāo)題', '作者', '摘要', '來源', '引用', '鏈接']    #表頭
for h in range(len(head)):
    sheet.write(0, h, head[h])    #把表頭寫到Excel里面去
i = 1  #定義Excel表格的行數(shù),從第二行開始寫入娱俺,第一行已經(jīng)寫了表頭    
for n in range(len(title)): 
    sheet.write(i, 0, title[n].text)
    sheet.write(i, 1, author[n].text)
    sheet.write(i, 2, content[n].text)
    sheet.write(i, 3, company[n].text)
    sheet.write(i, 4, info[n].text)
    sheet.write(i, 5, link[n].get_attribute('href'))    
    i += 1
workbook.save('C:/Users/Administrator/Desktop/知網(wǎng).xls')

完整代碼

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 13 15:25:33 2019

@author: Yenny
"""

from selenium import webdriver
import  time
import xlwt

browser = webdriver.Chrome()
# 打開博客
browser.get('http://wap.cnki.net/touch/web/guide')
time.sleep(0.3)

# 進(jìn)入搜索稍味,輸入主題
topic = "地下空間"
browser.find_element_by_id('btnSearch').click()
browser.find_element_by_id('keyword_ordinary').send_keys(topic)
browser.find_element_by_class_name('btn-search').click()
time.sleep(0.3)

# 篩選文獻(xiàn)
browser.find_element_by_id("articletype_a").click()
time.sleep(0.3)
browser.find_element_by_css_selector("a[data-value=\"14\"]").click()

# 篩選學(xué)科
# browser.find_element_by_id("menu-toggle").click()
# browser.find_element_by_class_name('c-filter-title').click()

# 獲取文獻(xiàn)數(shù)量
num = browser.find_element_by_class_name('search-number').text
num = int(num[:-1])

# 加載所有頁面
for i in range(int(num/10)):
    browser.find_element_by_class_name('c-company__body-item-more').click()
    time.sleep(0.3)


# 獲取文獻(xiàn)信息
title = browser.find_elements_by_class_name('c-company__body-title')
author = browser.find_elements_by_class_name('c-company__body-author')
link = browser.find_elements_by_class_name('c-company-top-link')
content = browser.find_elements_by_class_name('c-company__body-content')
company = browser.find_elements_by_class_name('color-green')
info = browser.find_elements_by_class_name('c-company__body-info')

# 保存到Excel
# 定義保存Excel的位置
workbook = xlwt.Workbook()  #定義workbook
sheet = workbook.add_sheet(topic)  #添加sheet
head = ['標(biāo)題', '作者', '摘要', '來源', '引用', '鏈接']    #表頭
for h in range(len(head)):
    sheet.write(0, h, head[h])    #把表頭寫到Excel里面去
i = 1  #定義Excel表格的行數(shù),從第二行開始寫入荠卷,第一行已經(jīng)寫了表頭    
for n in range(len(title)): 
    sheet.write(i, 0, title[n].text)
    sheet.write(i, 1, author[n].text)
    sheet.write(i, 2, content[n].text)
    sheet.write(i, 3, company[n].text)
    sheet.write(i, 4, info[n].text)
    sheet.write(i, 5, link[n].get_attribute('href'))    
    i += 1
workbook.save('C:/Users/Administrator/Desktop/知網(wǎng).xls')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末模庐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子油宜,更是在濱河造成了極大的恐慌掂碱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件验庙,死亡現(xiàn)場離奇詭異顶吮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)粪薛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門悴了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人违寿,你說我怎么就攤上這事湃交。” “怎么了藤巢?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵搞莺,是天一觀的道長。 經(jīng)常有香客問我掂咒,道長才沧,這世上最難降的妖魔是什么迈喉? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮温圆,結(jié)果婚禮上挨摸,老公的妹妹穿的比我還像新娘。我一直安慰自己岁歉,他們只是感情好得运,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锅移,像睡著了一般熔掺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上非剃,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天置逻,我揣著相機(jī)與錄音,去河邊找鬼努潘。 笑死诽偷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疯坤。 我是一名探鬼主播报慕,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼压怠!你這毒婦竟也來了眠冈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤菌瘫,失蹤者是張志新(化名)和其女友劉穎蜗顽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雨让,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雇盖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栖忠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崔挖。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庵寞,靈堂內(nèi)的尸體忽然破棺而出狸相,到底是詐尸還是另有隱情,我是刑警寧澤捐川,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布脓鹃,位于F島的核電站,受9級特大地震影響古沥,放射性物質(zhì)發(fā)生泄漏瘸右。R本人自食惡果不足惜娇跟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尊浓。 院中可真熱鬧逞频,春花似錦、人聲如沸栋齿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓦堵。三九已至,卻和暖如春歌亲,著一層夾襖步出監(jiān)牢的瞬間菇用,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工陷揪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惋鸥,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓悍缠,卻偏偏與公主長得像卦绣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子飞蚓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345