利用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 26进制计算实现方法
May 28 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Django forms组件的使用教程
Oct 08 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
QML使用Python的函数过程解析
Sep 26 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
Python集合操作方法详解
Feb 09 Python
selenium+超级鹰实现模拟登录12306
Jan 24 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技术开发技巧分享
2010/03/23 PHP
解析PHP提交后跳转
2013/06/23 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
python处理csv数据的方法
2015/03/11 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
西安众合通用.net笔试题
2013/03/18 面试题
餐饮营销方案
2014/02/23 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
早安问候语大全
2015/11/10 职场文书
Mysql忘记密码解决方法
2022/02/12 MySQL