网页css js 抓取助手(WebMagic介绍项目代码分为核心和扩展两部分的区别 )

优采云 发布时间: 2022-04-04 12:12

  网页css js 抓取助手(WebMagic介绍项目代码分为核心和扩展两部分的区别

)

  一、WebMagic介绍

  WebMagic 项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分包括一些便利和实用的功能。

  WebMagic 的设计目标是尽可能模块化,并体现爬虫的功能特点。这部分提供了一个非常简单灵活的API来编写爬虫,而无需基本改变开发模式。

  扩展部分(webmagic-extension)提供了一些方便的功能,比如以注解方式编写爬虫。同时内置了一些常用的组件,方便爬虫开发。

  1.1 架构介绍

  WebMagic 的结构分为四大组件:Downloader、PageProcessor、Scheduler 和 Pipeline,它们由 Spider 组织。这四个组件分别对应了爬虫生命周期中的下载、处理、管理和持久化的功能。WebMagic 的设计参考了 Scapy,但实现更类似于 Java。

  Spider 组织这些组件,以便它们可以相互交互并处理执行。可以认为Spider是一个大容器,也是WebMagic逻辑的核心。

  WebMagic的整体架构图如下:

  

  1.1.1 WebMagic 的四个组成部分

  1、下载器

  下载器负责从 Internet 下载页面以进行后续处理。WebMagic 默认使用 Apache HttpClient 作为下载工具。

  2、页面处理器

  PageProcessor 负责解析页面、提取有用信息和发现新链接。WebMagic 使用 Jsoup 作为 HTML 解析工具,并在其基础上开发了 Xsoup,一个解析 XPath 的工具。这四个组件中,PageProcessor对于每个站点的每个页面都是不同的,是需要用户自定义的部分。

  3、调度器

  Scheduler 负责管理要爬取的 URL,以及一些去重工作。WebMagic 默认提供 JDK 的内存队列来管理 URL,并使用集合进行去重。还支持使用 Redis 进行分布式管理。

  4、管道

  Pipeline负责提取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供两种结果处理方案:“输出到控制台”和“保存到文件”。

  Pipeline 定义了保存结果的方式。如果要保存到指定的数据库,需要编写相应的Pipeline。通常,对于一类需求,只需要编写一个 Pipeline。

  1.1.2 数据流对象

  1、请求

  Request是对URL地址的一层封装,一个Request对应一个URL地址。

  它是PageProcessor 与Downloader 交互的载体,也是PageProcessor 控制Downloader 的唯一途径。

  除了 URL 本身,它还收录一个 Key-Value 结构的额外字段。你可以额外保存一些特殊的属性,并在其他地方读取它们来完成不同的功能。例如,添加上一页的一些信息等。

  2、页面

  Page 表示从 Downloader 下载的页面 - 它可能是 HTML、JSON 或其他文本内容。页面是WebMagic抽取过程的核心对象,它提供了一些抽取、结果保存等方法。

  3、结果项

  ResultItems相当于一个Map,它保存了PageProcessor处理的结果,供Pipeline使用。它的API和Map非常相似,值得注意的是它有一个字段skip,如果设置为true,它不应该被Pipeline处理。

  1.2 入门案例

  1.2.1 添加依赖

  创建一个Maven项目并添加以下依赖项

  

  注意:0.7.3 版本不支持 SSL。如果直接从Maven中央仓库下载依赖,爬取只支持SSL v1.2的网站,会抛出SSL异常。

  1.2.2 添加*敏*感*词*

  WebMagic 使用 slf4j-log4j12 作为 slf4j 的实现。

  添加 log4j.properties 配置文件:

  log4j.rootLogger=INFO,A1

  log4j.appender.A1=org.apache.log4j.ConsoleAppender

  log4j.appender.A1.layout=org.apache.log4j.PatternLayout

  log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

  1.2.3 案例实现

  二、WebMagic 功能

  2.1 实现 PageProcessor

  2.1.1 提取元素可选

  WebMagic 中使用了三种主要的提取技术:XPath、正则表达式和 CSS 选择器。另外,对于 JSON 格式的内容,可以使用 JsonPath 进行解析。

  2.1.1.1 XPath

  入口案例是获取属性class=mt的div标签和里面h1标签的内容

  page.getHtml().xpath("//div[@class=mt]/h1/text()")

  2.1.1.2 个 CSS 选择器

  CSS 选择器是一种类似于 XPath 的语言。上一课我们学习了Jsoup的选择器。写起来比XPath简单,但是写更复杂的抽取规则就比较麻烦。

  div.mt>h1 表示类为mt的div标签下的直接子元素h1标签

  page.getHtml().css("div.mt>h1").toString()

  2.1.1.3 正则表达式

  正则表达式是一种通用的文本提取语言。这里一般用来获取url地址。

  2.1.2 提取元素 API

  可选相关提取元素链接 API 是 WebMagic 的核心功能。使用Selectable接口,可以直接完成页面元素的链式提取,无需关心提取的细节。

  在刚才的例子中可以看到,page.getHtml()返回一个实现了Selectable接口的Html对象。该接口收录的方法分为两类:提取部分和获取结果部分。

  

  2.1.3 获取结果 API

  当链式调用结束时,我们一般希望得到一个字符串类型的结果。这时候就需要使用API​​来获取结果了。

  我们知道,一条抽取规则,无论是 XPath、CSS 选择器还是正则表达式,总是可以抽取多个元素。WebMagic 将这些统一起来,可以通过不同的 API 获取一个或多个元素。

  

  2.1.4 获取链接

  有了处理页面的逻辑,我们的爬虫就差不多完成了,但是还有一个问题:一个站点的页面很多,我们不能一开始就全部列出来,那么如何找到后续的链接就是爬虫了不能缺少的部分

  下面的例子就是获取这个页面

  所有与 \\w+?.* 正则表达式匹配的 URL 地址,并将这些链接添加到要爬取的队列中。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线