利用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的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
python使用KNN算法手写体识别
Feb 01 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
详解python tkinter教程-事件绑定
Mar 28 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
python区块及区块链的开发详解
Jul 03 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
教你用python实现一个无界面的小型图书管理系统
May 21 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
python插入排序算法的实现代码
2013/11/21 Python
Python中类的继承代码实例
2014/10/28 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
python对象及面向对象技术详解
2016/07/19 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
python 元组的使用方法
2020/06/09 Python
大学生思想汇报范文
2013/12/31 职场文书
护士毕业实习感言
2014/03/05 职场文书
太太口服液广告词
2014/03/20 职场文书
入股协议书范本
2014/04/14 职场文书
工厂见习报告范文
2014/10/31 职场文书
明确岗位职责
2015/02/14 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
2017春节晚会开幕词
2016/03/03 职场文书