利用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 cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
Python中的Django基本命令实例详解
Jul 15 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
Python基础数据类型tuple元组的概念与用法
Aug 02 Python
Python四款GUI图形界面库介绍
Jun 05 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实现采集程序原理和简单示例代码
2007/03/18 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
javascript 闭包详解
2015/07/02 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
Python实现高效求解素数代码实例
2015/06/30 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
英国在线药房:Express Chemist
2019/03/28 全球购物
青年教师典范事迹材料
2014/01/31 职场文书
食品采购员岗位职责
2014/04/14 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
电信营业员岗位职责
2015/04/14 职场文书
团结主题班会
2015/08/13 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle