利用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 相关文章推荐
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
给Python IDLE加上自动补全和历史功能
Nov 30 Python
使用Python编写vim插件的简单示例
Apr 17 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
详解python3中tkinter知识点
Jun 21 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 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 动态添加记录
2009/03/10 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
php实现webservice实例
2014/11/06 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
php实现对象克隆的方法
2015/06/20 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
PHP7新功能总结
2019/04/14 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
用一段js程序来实现动画功能
2007/03/06 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
异常和异常类的概念
2014/09/12 面试题
法雷奥SQA(electric)面试问题
2016/01/23 面试题
工商局副局长个人对照检查材料
2014/09/25 职场文书
单位介绍信格式
2015/01/31 职场文书
放假通知范文
2015/04/14 职场文书
房屋维修申请报告
2015/05/18 职场文书
红色经典电影观后感
2015/06/18 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
优质护理心得体会
2016/01/22 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android