利用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编写android截屏脚本双击运行即可
Jul 21 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
Jun 13 Python
python清除函数占用的内存方法
Jun 25 Python
Python实现多属性排序的方法
Dec 05 Python
python如何求数组连续最大和的示例代码
Feb 04 Python
如何使用python传入不确定个数参数
Feb 18 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python包管理工具pip的15 个使用小技巧
May 17 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
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
详解使用python crontab设置linux定时任务
2016/12/08 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
秋季运动会表扬稿
2014/01/16 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
精神病医院见习报告
2014/11/03 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
python文件与路径操作神器 pathlib
2022/04/01 Python