通过上一篇的小 demo,我们发现爬取网页内容都是通过实现 PageProcessor 来抓取的。在第一章也介绍到实 PageProcessor 是 Webmagic 4个重要组件之一。PageProcessor 的主要作用是:负责解析页面,抽取有用信息,以及发现新的链接。
下面我们再来看看GithubRepoPageProcessor的内容:
public class GithubRepoPageProcessor implements PageProcessor { // 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等 private Site site = Site.me().setRetryTimes(3).setSleepTime(1000); @Override // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑 public void process(Page page) { // 部分二:定义如何抽取页面信息,并保存下来 page.putField("author", page.getUrl().regex("https://github//.com/(//w+)/.*").toString()); page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString()); if (page.getResultItems().get("name") == null) { //skip this page page.setSkip(true); } page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()")); // 部分三:从页面发现后续的url地址来抓取 page.addTargetRequests(page.getHtml().links().regex("(https://github//.com/[//w//-]+/[//w//-]+)").all()); } @Override public Site getSite() { return site; } public static void main(String[] args) { Spider.create(new GithubRepoPageProcessor()) //从"https://github.com/code4craft"开始抓 .addUrl("https://github.com/code4craft") //开启5个线程抓取 .thread(5) //启动爬虫 .run(); } }
PageProcessor 接口主要有两个方法。
- void process(Page page):负责处理页面,提取URL获取,提取数据和存储
- Site getSite():获取站点相关设置信息
关于爬虫的配置,包括编码、抓取间隔、超时时间、重试次数等,也包括一些模拟的参数,例如User Agent、cookie,以及代理的设置使用见下面内容!
Spider
Spider是爬虫启动的入口。在启动爬虫之前,我们需要使用一个PageProcessor创建一个Spider对象,然后使用run()进行启动。同时Spider的其他组件(Downloader、Scheduler、Pipeline)都可以通过set方法来进行设置。
Site
对站点本身的一些配置信息,例如编码、HTTP头、超时时间、重试策略等、代理等,都可以通过设置Site对象来进行配置。
循环重试cycleRetry机制会将下载失败的url重新放入队列尾部重试,直到达到重试次数,以保证不因为某些网络原因漏抓页面。
这两个api你完全掌握之后,剩下的就是Xsoup解析了。关于Xsoup解析,我们下章再讲!
: » Webmagic 爬虫的配置、启动和终止
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/251569.html