利用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中的魔法方法深入理解
Jul 09 Python
Python生成pdf文件的方法
Aug 04 Python
Python日志模块logging简介
Apr 13 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
Python 监测文件是否更新的方法
Jun 10 Python
python对常见数据类型的遍历解析
Aug 27 Python
np.random.seed() 的使用详解
Jan 14 Python
python实现PCA降维的示例详解
Feb 24 Python
Python如何省略括号方法详解
Mar 21 Python
树莓派升级python的具体步骤
Jul 05 Python
详解python网络进程
Jun 15 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过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
优秀护士获奖感言
2014/02/20 职场文书
机关办公室岗位职责
2014/04/16 职场文书
文员岗位职责范本
2015/04/16 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python