chrome网页视频抓取(有type,记录如下流程状态->入库(组图))

优采云 发布时间: 2022-01-24 04:23

  chrome网页视频抓取(有type,记录如下流程状态->入库(组图))

  背景说明

  由于目标页面是用vue结构写的,通过urlConnection获取连接后无法使用Document/Jsoup解析。页面元素通过js动态呈现。后来尝试通过webMagic框架和selenium\Chrome来抓取和整理基础数据。

  加工

  设计标记表结构,记录捕获的状态和数据,配置selenium相关环境,分析页面dom元素的工具,编码和解析html进程,编码,集成和调试处理器和管道层webmagic 框架。数据存储操作

  步骤解剖

  1. 标记表结构设计,示例表如下

  <br />CREATE TABLE `data` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL COMMENT 'dataname',

`type` tinyint(4) DEFAULT NULL COMMENT '类型',

`xx` int(11) DEFAULT '0' COMMENT '修订',

`xx` ...

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='数据标记'

  制作这张表的初衷是对抓取的数据做一个基本的保留,提取过程中的核心数据用于后期的统计和验证处理。因为不信任抓取数据的结果【可能是网络中断,页面无法正常打开,页面打开后布局混乱,并发情况下浏览器窗口意外关闭,页面修改元素添加和更改。获取目标数据]。所以有一个type字段来记录下面的进程状态

  抓取 -&gt; 打开 -&gt; 操作 -&gt; 解析 -&gt; 库存 -&gt; 抓取

  其中

1.爬取 是指抓取根路径或者获取到页面上的目标url路径;

2.打开 是指通过Chrome driver打开url的过程;

3.操作 是指需要通过selenium模拟点击、跳转、输入等操作;

4.解析 是指到达目标页面后对html元素进行解析并获取有效内容

5.入库 将内容进行持久化操作

6.爬取 获取下一级链接,循环此操作

  这里最不可控的一步是2、3、4。由于各种原因,可能会出现各种问题。因此,需要记录当前数据的执行状态。当然,如果数据对你来说是可丢失的、可重复的、可信的,你可以忽略部分数据,以量取胜。

  2. Selenium 相关环境配置

  先引入jar,下载浏览器对应驱动并配置

  

org.seleniumhq.selenium

selenium-java

3.9.1

org.seleniumhq.selenium

selenium-server

3.9.1

org.yaml

snakeyaml

  上面是pom配置,下面是驱动变量设置,

  static

{

System.getProperties().setProperty("webdriver.chrome.driver", "/Users/chenhailong/Downloads/tools/nessarytool/chromedriver");

}

  运行以下代码时,浏览器可以正常打开,说明配置正常

  WebDriver w = new ChromeDriver();

w.get("https://www.deathearth.com");

# 控制台会输出以下信息

Starting ChromeDriver 2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011) on port 33558

Only local connections are allowed.

八月 23, 2019 5:02:46 下午 org.openqa.selenium.remote.ProtocolHandshake createSession

信息: Detected dialect: OSS

  这种环境下最容易出现的问题就是浏览器版本和驱动版本不一致,导致程序无法打开浏览器。或者浏览器自动升级的影响。只需仔细配置即可。

  3. 解析页面上的html元素

  一个。这里最麻烦的就是页面修改问题。我只是写了一套匹配规则来处理它。但是,目标网站经常会改变布局,调整按钮的功能。因此,基本上需要随着目标网站的变化而变化。没门。

  湾。其次,存在分析效率问题。我遇到过两种情况。一种是在抓取长文本类型(超过10w字节)的文章的内容时,通过父元素的text()方法读取,内容被截断。导致信息不完整。这是通过循环子标签来处理的。如下

<p>

...

...

修改前: w.findElements(By.id("content")).getText()

修改后:List ls = w.findElements(By.xpath("div"))

for(int i = 0;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线