利用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登陆asp网站页面的实现代码
Jan 14 Python
列举Python中吸引人的一些特性
Apr 09 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
详解【python】str与json类型转换
Apr 29 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
使用numpy nonzero 找出非0元素
May 14 Python
python 实现图与图之间的间距调整subplots_adjust
May 21 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实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
python append、extend与insert的区别
2016/10/13 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python如何输出百分比
2020/07/31 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
年度考核自我鉴定
2014/03/19 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
党员个人总结范文
2015/02/14 职场文书
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers