WebMagic
2021-09-14 17:30:54 6 举报
AI智能生成
WebMagic使用
作者其他创作
大纲/内容
WebMagic的四个组件
1.Downloader
Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。
2.PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。
WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。
在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。
在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
3.Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。
4.Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。
WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。
Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。
架构图
架构图
PageProcessor组件
Site对象
Site对象,可以使用Site.me()创建。
在此对象中可以对爬虫进行一些配置配置,包括编码、抓取间隔、超时时间、重试次数等
在此对象中可以对爬虫进行一些配置配置,包括编码、抓取间隔、超时时间、重试次数等
//可以对爬虫进行一些配置
private Site site = Site.me()
.setCharset("UTF-8")//编码
.setSleepTime(1)//抓取间隔时间,可以解决一些反爬限制
.setTimeOut(1000 * 10)//超时时间
.setRetrySleepTime(3000)//重试时间
.setRetryTimes(3);//重试次数
private Site site = Site.me()
.setCharset("UTF-8")//编码
.setSleepTime(1)//抓取间隔时间,可以解决一些反爬限制
.setTimeOut(1000 * 10)//超时时间
.setRetrySleepTime(3000)//重试时间
.setRetryTimes(3);//重试次数
page对象
Page对象是PageProcess组件中的核心对象,此对象中包含三个核心操作:
获取Downloader对象下载结果
当我们需要从page对象中获得下载结果时,可以使用page对象的getHtml()方法。
此方法的返回结果就是一个Html对象,也可以看做把这个html页面解析之后映射成一个Html对象,Html对象实现了Selectable接口,是可以直接使用Selectable接口中提供的选择器。
向Scheduler对象中添加Request对象也就是待访问的url
使用addTargetRequest或者addTargetRequests方法可以将解析出来的链接添加到url访问队列,系统会把url封装成Request对象供Scheduler对象使用。
向Pipeline对象中设置输出结果
使用putField方法可以将解析的结果添加到ResultItems对象中,将来在Pipeline对象中可以取到这个数据。
page对象
Selectable对象
抽取元素:Selectable相关的抽取元素链式API是WebMagic的一个核心功能。使用Selectable接口,可以直接完成页面元素的链式抽取,也无需去关心抽取的细节。
XPath:XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
CSS选择器:在 CSS 中,选择器是选取需设置样式的元素的模式。
正则表达式
使用Pipeline保存结果
在WebMagic中,Pileline是抽取结束后,进行数据处理的部分,它主要用于抽取结果的保存,也可以定制Pileline可以实现一些通用的功能。
在这里我们可以指定输出的位置,可以是控制台也可以是文件,当然也可以用户自定义Pipeline实现数据导入到数据库中。
在这里我们可以指定输出的位置,可以是控制台也可以是文件,当然也可以用户自定义Pipeline实现数据导入到数据库中。
现有的Pipeline
实例
Spider
Spider是爬虫启动的入口。在启动爬虫之前,我们需要使用一个PageProcessor创建一个Spider对象,然后使用run()进行启动。
同时Spider的其他组件(Downloader、Scheduler、Pipeline)都可以通过set方法来进行设置。
0 条评论
下一页