利用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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
Python入门篇之函数
Oct 20 Python
Python win32com 操作Exce的l简单方法(必看)
May 25 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python实现学校管理系统
Jan 11 Python
python实现定时发送qq消息
Jan 18 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
深入了解Django View(视图系统)
Jul 23 Python
python序列类型种类详解
Feb 26 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
python实现发送QQ邮件(可加附件)
Dec 23 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中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php中使用sftp教程
2015/03/30 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
简述php环境搭建与配置
2016/12/05 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
Python break语句详解
2014/03/11 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Pytorch之finetune使用详解
2020/01/18 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
python 弧度与角度互转实例
2020/04/15 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
委托公证书
2014/04/08 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书