利用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自然语言编码转换模块codecs介绍
Apr 08 Python
利用python批量检查网站的可用性
Sep 09 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
Python编写通讯录通过数据库存储实现模糊查询功能
Jul 18 Python
python3中的eval和exec的区别与联系
Oct 10 Python
Python 依赖库太多了该如何管理
Nov 08 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Python中的全局变量如何理解
Jun 04 Python
Python用dilb提取照片上人脸的示例
Oct 26 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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 函数语法介绍一
2009/06/14 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
大学生最新职业生涯规划书范文
2014/01/12 职场文书
就业协议书的作用
2014/04/11 职场文书
宣传口号大全
2014/06/16 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server