利用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 相关文章推荐
在Docker上开始部署Python应用的教程
Apr 17 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
详解Python3注释知识点
Feb 19 Python
如何使用Python实现斐波那契数列
Jul 02 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
python写一个随机点名软件的实例
Nov 28 Python
python3实现绘制二维点图
Dec 04 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
Pygame如何使用精灵和碰撞检测
Nov 17 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
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
浅析Python编写函数装饰器
2016/03/18 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python实现小世界网络生成
2019/11/21 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
HTTP状态码详解
2021/03/18 杂记
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
销售自我评价
2013/10/22 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫