利用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抓取网页图片示例(python爬虫)
Apr 27 Python
在Python中使用PIL模块处理图像的教程
Apr 29 Python
Python处理Excel文件实例代码
Jun 20 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
用python求一重积分和二重积分的例子
Dec 06 Python
Python更新所有已安装包的操作
Feb 13 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Python基于pillow库实现生成图片水印
Sep 14 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 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 开发工具
2006/12/06 PHP
Smarty+QUICKFORM小小演示
2007/02/25 PHP
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
Smarty模板配置实例简析
2019/07/20 PHP
jquery获取复选框被选中的值
2014/03/22 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python之list对应元素求和的方法
2018/06/28 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
班级学雷锋活动总结
2014/06/26 职场文书
个人租房协议书
2014/11/28 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
nginx七层负载均衡配置详解
2022/07/15 Servers