利用selenium爬虫抓取数据的基础教程


Posted in Python onJune 10, 2019

写在前面

本来这篇文章该几个月前写的,后来忙着忙着就给忘记了。

ps:事多有时候反倒会耽误事。

几个月前,记得群里一朋友说想用selenium去爬数据,关于爬数据,一般是模拟访问某些固定网站,将自己关注的信息进行爬取,然后再将爬出的数据进行处理。

他的需求是将文章直接导入到富文本编辑器去发布,其实这也是爬虫中的一种。

其实这也并不难,就是UI自动化的过程,下面让我们开始吧。

准备工具/原料

1、java语言

2、IDEA开发工具

3、jdk1.8

4、selenium-server-standalone(3.0以上版本)

步骤

1、分解需求:

需求重点主要是要保证原文格式样式都保留:

将要爬取文章,全选并复制

将复制后的文本,粘贴到富文本编辑器中即可

2、代码实现思路:

键盘事件模拟CTRL+A全选

键盘事件模拟CTRL+C复制

键盘事件模拟CTRL+V粘贴

3、实例代码

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.concurrent.TimeUnit;

/**
 * @author rongrong
 * Selenium模拟访问网站爬虫操作代码示例
 */
public class Demo {
 private static WebDriver driver;
 static final int MAX_TIMEOUT_IN_SECONDS = 5;

 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  driver = new ChromeDriver();
  String url = "https://temai.snssdk.com/article/feed/index?id=6675245569071383053&subscribe=5501679303&source_type=28&content_type=1&create_user_id=34013&adid=__AID__&tt_group_id=6675245569071383053";
  driver.manage().window().maximize();
  driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
  driver.get(url);
 }

 @AfterClass
 public static void tearDownAfterClass() throws Exception {
  if (driver != null) {
   System.out.println("运行结束!");
   driver.quit();
  }
 }

 @Test
 public void test() throws InterruptedException {
  Robot robot = null;
  try {
   robot = new Robot();
  } catch (AWTException e1) {
   e1.printStackTrace();
  }
  robot.keyPress(KeyEvent.VK_CONTROL);
  robot.keyPress(KeyEvent.VK_A);
  robot.keyRelease(KeyEvent.VK_A);
  Thread.sleep(2000);
  robot.keyPress(KeyEvent.VK_C);
  robot.keyRelease(KeyEvent.VK_C);
  robot.keyRelease(KeyEvent.VK_CONTROL);
  driver.get("https://ueditor.baidu.com/website/onlinedemo.html");
  Thread.sleep(2000);
  driver.switchTo().frame(0);
  driver.findElement(By.tagName("body")).click();
  robot.keyPress(KeyEvent.VK_CONTROL);
  robot.keyPress(KeyEvent.VK_V);
  robot.keyRelease(KeyEvent.VK_V);
  robot.keyRelease(KeyEvent.VK_CONTROL);
  Thread.sleep(2000);
 }
}

写在后面

笔者并不是特别建议使用selenium做爬虫,原因如下:

速度慢:

每次运行爬虫都要打开一个浏览器,初始化还需要加载图片、JS渲染等等一大堆东西;

占用资源太多:

有人说,把换成无头浏览器,原理都是一样的,都是打开浏览器,而且很多网站会验证参数,如果对方看到你恶意请求访问,会办了你的请求,然后你又要考虑更换请求头的事情,事情复杂程度不知道多了多少,还得去改代码,麻烦死了。

对网络的要求会更高:

加载了很多可能对您没有价值的补充文件(如css,js和图像文件)。 与真正需要的资源(使用单独的HTTP请求)相比,这可能会产生更多的流量。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python列表操作使用示例分享
Feb 21 Python
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
Python探索之pLSA实现代码
Oct 25 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
Python3压缩和解压缩实现代码
Mar 01 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
Python 监测文件是否更新的方法
Jun 10 #Python
python实现随机漫步方法和原理
Jun 10 #Python
使用python判断jpeg图片的完整性实例
Jun 10 #Python
关于Python作用域自学总结
Jun 10 #Python
Python读写文件基础知识点
Jun 10 #Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 #Python
python三大神器之fabric使用教程
Jun 10 #Python
You might like
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php英文单词统计器
2016/06/23 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
Python fileinput模块使用实例
2015/06/03 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
python实现粒子群算法
2020/10/15 Python
捷科时代的软件测试笔试题
2015/11/09 面试题
广州某公司软件工程师面试题
2014/12/22 面试题
餐饮总经理岗位职责
2014/03/07 职场文书
爱护公共设施标语
2014/06/24 职场文书
反腐倡廉观后感
2015/06/08 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
资产移交协议书
2016/03/24 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript