爬虫:用selenium 爬取知网文献基本信息

前几天有个小伙伴让我帮他写个代码,要求如下:

  • 爬取知网文献
  • 检索条件:学科类别勾选“社会科学一辑”所有“法学”类;
  • 文献类型“期刊”,来源“cssci”,时间不限
  • 主题词“地下空间”

我尝试了一下,电脑版搞不定(应该是我水平差),但是手机版,可以简单实现这个功能

功能介绍

流程:

  • selenium (浏览器自动化测试框架)打开浏览器
  • 输入检索关键词地下空间
  • 筛选文献,把期刊来源设置为cssci
  • 筛选学科(这部分后面再补充)
  • 读取文献总数量,加载所有页面
  • 读取每篇文献的标题作者摘要来源引用链接
  • 保存成Excel文件
汇总成Excel

准备工作

在开始写代码之前,要保证两点:
1、你有Python的软件,安装好selenium 的库了
2、安装对应的浏览器驱动

Python的安装你可以点这里 Python程序的安装和运行

安装selenium 也很简单,在附件—>命令提示符 打开窗口,输入pip install selenium

关于安装对应的浏览器驱动,以 Chrome 浏览器,点击右上角点点点的那个符号,选择帮助 - 关于 Google Chrome

可以看到浏览器的版本号,然后我们去下载一个驱动

版本号

打开 https://npm.taobao.org/mirrors/chromedriver ,选择一个和你版本比较接近的安装文件

我是Windows系统,所以我下载chromedriver_win32.zip

下载之后,把这个文件解压,里面只有一个.exe后缀的驱动文件。把它剪切到 Python 安装目录的 Scripts 文件夹里。

怎么找到 Python 的安装目录,你可以在附件—>命令提示符 ,打开命令提示符,输入where python。比如我的安装目录,在C盘下面

开始干活

selenium是个很神奇的东西,它可以帮你模拟浏览器的操作

先把库都放进来

from selenium import webdriver   # selenium用于打开浏览器
import  time  # 把关于时间的库加进来,这个是系统自带的
import xlwt  # 这个库是为了后面保存Excel

把浏览器打开,用time.sleep人为的暂停一会,速度太快了自己都看不清操作~

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

进入搜索,输入主题。可以根据ID搜索,也可以根据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)
输入主题词
点击搜索

筛选文献,把期刊来源勾选为“cssci”

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

获取文献数量

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)
加载所有页面

获取文献信息

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 = ['标题', '作者', '摘要', '来源', '引用', '链接']    #表头
for h in range(len(head)):
    sheet.write(0, h, head[h])    #把表头写到Excel里面去
i = 1  #定义Excel表格的行数,从第二行开始写入,第一行已经写了表头    
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/知网.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)

# 进入搜索,输入主题
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)

# 筛选文献
browser.find_element_by_id("articletype_a").click()
time.sleep(0.3)
browser.find_element_by_css_selector("a[data-value=\"14\"]").click()

# 筛选学科
# browser.find_element_by_id("menu-toggle").click()
# browser.find_element_by_class_name('c-filter-title').click()

# 获取文献数量
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)


# 获取文献信息
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 = ['标题', '作者', '摘要', '来源', '引用', '链接']    #表头
for h in range(len(head)):
    sheet.write(0, h, head[h])    #把表头写到Excel里面去
i = 1  #定义Excel表格的行数,从第二行开始写入,第一行已经写了表头    
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/知网.xls')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351