前幾天有個小伙伴讓我?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文件
準(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)
篩選文獻(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])
加載所有頁面
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')
完整代碼
# -*- 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')