设为首页收藏本站

EPS数据狗论坛

搜索
快捷导航
查看: 2248|回复: 4

使用selenium爬虫抓取数据

  [复制链接]

18

主题

126

金钱

210

积分

入门用户

发表于 2019-6-11 14:15:10 | 显示全部楼层 |阅读模式

准备工具/原料:
1、java语言
2、IDEA开发工具
3、jdk1.8
4、selenium-server-standalone(3.0以上版本)

步骤
1、分解需求:
需求重点主要是要保证原文格式样式都保留:
将要爬取文章,全选并复制
将复制后的文本,粘贴到富文本编辑器中即可
2、代码实现思路:
键盘事件模拟CTRL+A全选
键盘事件模拟CTRL+C复制
键盘事件模拟CTRL+V粘贴
3、实例代码:
  1. import org.junit.AfterClass;
  2. import org.junit.BeforeClass;
  3. import org.junit.Test;
  4. import org.openqa.selenium.By;
  5. import org.openqa.selenium.WebDriver;
  6. import org.openqa.selenium.chrome.ChromeDriver;

  7. import java.awt.*;
  8. import java.awt.event.KeyEvent;
  9. import java.util.concurrent.TimeUnit;

  10. /**
  11. * @author rongrong
  12. * Selenium模拟访问网站爬虫操作代码示例
  13. */
  14. public class Demo {
  15.     private static WebDriver driver;
  16.     static final int MAX_TIMEOUT_IN_SECONDS = 5;

  17.     @BeforeClass
  18.     public static void setUpBeforeClass() throws Exception {
  19.         driver = new ChromeDriver();
  20.         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";
  21.         driver.manage().window().maximize();
  22.         driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
  23.         driver.get(url);
  24.     }

  25.     @AfterClass
  26.     public static void tearDownAfterClass() throws Exception {
  27.         if (driver != null) {
  28.             System.out.println("运行结束!");
  29.             driver.quit();
  30.         }
  31.     }

  32.     @Test
  33.     public void test() throws InterruptedException {
  34.         Robot robot = null;
  35.         try {
  36.             robot = new Robot();
  37.         } catch (AWTException e1) {
  38.             e1.printStackTrace();
  39.         }
  40.         robot.keyPress(KeyEvent.VK_CONTROL);
  41.         robot.keyPress(KeyEvent.VK_A);
  42.         robot.keyRelease(KeyEvent.VK_A);
  43.         Thread.sleep(2000);
  44.         robot.keyPress(KeyEvent.VK_C);
  45.         robot.keyRelease(KeyEvent.VK_C);
  46.         robot.keyRelease(KeyEvent.VK_CONTROL);
  47.         driver.get("https://ueditor.baidu.com/website/onlinedemo.html");
  48.         Thread.sleep(2000);
  49.         driver.switchTo().frame(0);
  50.         driver.findElement(By.tagName("body")).click();
  51.         robot.keyPress(KeyEvent.VK_CONTROL);
  52.         robot.keyPress(KeyEvent.VK_V);
  53.         robot.keyRelease(KeyEvent.VK_V);
  54.         robot.keyRelease(KeyEvent.VK_CONTROL);
  55.         Thread.sleep(2000);
  56.     }


  57. }
复制代码



写在后面
笔者并不是特别建议使用selenium做爬虫,原因如下:

速度慢:
每次运行爬虫都要打开一个浏览器,初始化还需要加载图片、JS渲染等等一大堆东西;

占用资源太多:
有人说,把换成无头浏览器,原理都是一样的,都是打开浏览器,而且很多网站会验证参数,如果对方看到你恶意请求访问,会办了你的请求,然后你又要考虑更换请求头的事情,事情复杂程度不知道多了多少,还得去改代码,麻烦死了。

对网络的要求会更高:
加载了很多可能对您没有价值的补充文件(如css,js和图像文件)。 与真正需要的资源(使用单独的HTTP请求)相比,这可能会产生更多的流量。

7

主题

678

金钱

3321

积分

中级用户

发表于 2020-1-2 20:41:46 | 显示全部楼层
很好,谢谢!
ximenyan
回复

使用道具 举报

7

主题

678

金钱

3321

积分

中级用户

发表于 2020-1-2 20:42:04 | 显示全部楼层
有才人,赞一个!
ximenyan
回复 支持 反对

使用道具 举报

0

主题

10

金钱

31

积分

新手用户

发表于 2020-12-23 22:08:34 | 显示全部楼层
不是特别建议使用selenium做爬虫
回复 支持 反对

使用道具 举报

0

主题

47

金钱

66

积分

新手用户

发表于 2021-2-23 15:33:34 | 显示全部楼层
爬虫大佬好啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
9:00-18:00
QQ群:
542280196
联系电话:
010-85786021-8017
在线咨询
客服中心

Powered by BFIT! X3.2© 2008-2018 BFIT Inc.

快速回复 返回顶部 返回列表