文章目的

最近需要在网上下载一些文献,输入关键词后大概有900篇文献,一个一个下载实在费时费力,所以想着写python程序进行文献自动下载。网上也有博客跟自动下载文献有关,如python 批量下载知网(CNKI)论文,但是代码在用的过程中总是有点问题,所以就自己边学Selenium边学着写爬虫。


文章目录

  • 文章目的
  • 环境搭建
  • 所有代码
  • 总结

环境搭建

本次开发工具使用的是Jupyter+Selenium库,具体的安装步骤不细说了,可以参考其他博客。 需要注意的是,在环境搭建过程中,需要下载一个chromedriver.exe放到与脚本同一个文件夹内,chromedriver.exe需要与电脑里chrome浏览器的版本号相匹配,具体可以参考selenium自动化测试资源整理。


所有代码

import os
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
import pdbdef switch2NextPage(object):nextPageURL = object.find_element(by = By.ID, value = "PageNext")print("nextPageURL = ", nextPageURL)nextPageURL.click()   keyword = u'需要搜索的关键词'
pageNum = 45 #下载多少页的论文
currentPageNum = 1
downloadTime = 1browser = webdriver.Chrome()
browser.get("https://www.cnki.net/")
sleep(2)
browser.find_element(by=By.XPATH, value = '/html/body/div[1]/div[2]/div/div[1]/input[1]').send_keys(keyword)
browser.find_element(by=By.XPATH, value = '/html/body/div[1]/div[2]/div/div[1]/input[2]').click()
sleep(2)
#searchWindow = browser.switch_to.window(browser.current_window_handle)#找到结果列表,并获取列表行数,比如设置的是每页显示20条结果,那么这边的rowLength则是20
resultTable = browser.find_element(by=By.XPATH, value = '/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody')
rows = resultTable.find_elements(by=By.TAG_NAME, value = 'tr')
rowLength = len(rows)
#print(len(rows))while currentPageNum<=pageNum:for num in range(0,rowLength-1):browser.switch_to.window(browser.window_handles[0])row = browser.find_element(by=By.XPATH, value = '/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody').find_elements(by=By.TAG_NAME, value = 'tr')[num]td = row.find_element(by=By.CLASS_NAME, value = 'operat')a = td.find_element(by = By.XPATH, value = './a[1]')print(a)url = a.get_attribute('href')#print(url)try:#防止出现验证,重新打开界面browser.execute_script('window.open()')browser.switch_to.window(browser.window_handles[1])browser.get(url)browser.implicitly_wait(10)browser.close()except Exception as e:print (e)print ('下载次数 =', downloadTime)downloadTime = downloadTime + 1currentPageNum += 1print(currentPageNum)browser.switch_to.window(browser.window_handles[0])switch2NextPage(browser)browser.close()

总结

  1. 代码是使用selenium对知网上元素进行定位,这里使用的是网站新版界面,要是是旧版界面,部分代码需要改动
  2. 使用时需提前连好校园网
  3. 下载过多时可能会出现输入验证码的情况,重新输入验证码即可再次下载
  4. 终于不用再去网上一篇一篇下载文章了^^

【Python+Selenium】输入关键词自动下载论文相关推荐

  1. Python自动下载论文

    Python自动下载论文 下载地址 http://dblp.uni-trier.de/db/conf/sigcomm/ 目录 - 先上最终版本: - 说说sigcomm上论文下载的姿势 - 中间的一些 ...

  2. Python+Selenium实现新浪微博自动登录

    Python+Selenium实现新浪微博自动登录 环境说明:win10+eclipse+chrome 备注:需要下载chrome浏览器的驱动(地址: https://sites.google.com ...

  3. 输入关键词自动生成文章-免费自动输入关键词自动生成文章器

    输入关键词自动生成文章,什么是输入关键词自动生成文章?例:你输入什么关键词 '装修'免费工具会自动生成一篇跟装修相关的文章,该免费工具还支持:自动关键词文章生成+文章自动采集+伪原创+自动发布+自动推 ...

  4. python 编写一段自动下载微信群的聊天记录中的图片并保存到本地的代码

    以下是一段简单的 Python 代码,可以自动下载微信群聊天记录中的图片并保存到本地: import requestsdef download_image(url, file_name):respon ...

  5. python自动下载论文_python自动下载高品质无损歌曲

    不知道大家有没有这样的感觉,听到一些好听的歌曲,总是想要把歌曲下载到自己电脑或手机上才感觉到踏实,尤其是在早些年智能手机还没这么普及的时候,喜欢的歌曲不在自己电脑上就会没有安全感. 虽然现在听歌基本都 ...

  6. python自动下载安装软件_30行Python代码从百度自动下载图片(内附源码和exe程序)...

    只需要30行代码就可以从百度自动下载图片 大家好,我是行哥,一个专门教小学生撸Python的编程老师(小学生都能学会的编程) 这里行哥想问大家三个问题 : - 你还在为批量下载表情包发愁吗? - 你还 ...

  7. Java爬虫之批量下载LibreStock图片(可输入关键词查询下载)

    前言(废话) 公司产品新版本刚刚上线,所以也终于得空休息一下了,有了一点时间.由于之前看到过爬虫,可以把网页上的数据通过代码自动提取出来,觉得挺有意思的,所以也想接触一下,但是网上很多爬虫很多都是基于 ...

  8. python+selenium爬虫自动化批量下载文件

    一.项目需求 在一个业务网站有可以一个个打开有相关内容的文本,需要逐个保存为TXT,数据量是以千为单位,人工操作会麻木到崩溃. 二.解决方案 目前的基础办法就是使用python+selenium自动化 ...

  9. Python selenium实现微博自动登录

    (一)编程环境 操作系统:Win 10 编程语言:Python 3.6 (二)安装selenium 这里使用selenium实现. 如果没有安装过python的selenium库,则安装命令如下 pi ...

  10. 输入关键词自动获取相关图片素材的方法

    网站图片素材收集工具支持我们对网页图片进行收集,支持通过关键词或短语模糊搜索,也可以根据目标网站进行精准抓取,网站和自媒体管理我们的图片更新都需要我们拥有足够多的素材来支撑我们的主题. 生活中我们随处 ...

最新文章

  1. mysql 事务涉及锁吗_MySQL-锁机制和事务
  2. zerodivisionerror什么意思python-Python with as的用法
  3. 【转载】从康耐视(NASDAQ : CGNX)看国内视觉识别行业的机会
  4. 里氏替换原则→类型转换
  5. [云炬python3玩转机器学习]5-4向量化高效运算
  6. 智能手机系统对进程生命周期的管理
  7. python类定义全局变量_python之全局变量
  8. 闲着无聊,今天就写个 dockerfile 定制 tomcat+nginx 集群
  9. 演练 青鸟游戏迷你平台
  10. Ubuntu16.04 设置环境变量的方法
  11. ALAsset 将资源转换为 NSData
  12. CentOS 7 配置yum本地base源和阿里云epel源
  13. 你见过最垃圾的代码长什么样?19 种垃圾代码片段!
  14. 关于qt使用sqlist数据库的注意事项
  15. 如何解决PDF图片字体未嵌入的问题
  16. H5中的video标签使用
  17. Web前端开发三剑客是做什么的?
  18. mysql存储过程工作日判断_Oracle存储过程根据指定日期返回(N个)工作日的时间...
  19. catia刨面命令_Catia查看装配体剖面的操作方法
  20. 色色教你玩魔方(傻瓜式全程图解教学)

热门文章

  1. 转使用chrome命令行:disable-web-security 实现浏览器跨域
  2. 安卓开发学习之锁屏的实现
  3. java游戏+弹幕_java弹幕小游戏1.0版本
  4. 刷新bios后电脑死机了怎么办
  5. linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate
  6. Android EditText 获得焦点不显示光标
  7. word打开文档很久很慢_打开Word文档出现假死或超慢的原因及解决方法
  8. 用 Opencv 和 Python 对汪星人做模糊检测
  9. debian 7 调整控制台分辨率
  10. 2017 暑期实习校园招聘(Java后台开发方向)面经分享