我们仍然要定义如何发现URL。这里我们要先引入两个概念:@TargetUrl
和@HelpUrl
。
HelpUrl/TargetUrl
是一个非常有效的爬虫开发模式,TargetUrl
是我们最终要抓取的URL,最终想要的数据都来自这里;而HelpUrl
则是为了发现这个最终URL,我们需要访问的页面。几乎所有垂直爬虫的需求,都可以归结为对这两类URL的处理:
在这个例子中,TargetUrl是最终的项目页,而HelpUrl则是项目搜索页,它会展示所有项目的链接。
@TargetUrl("https://github.com/\\w+/\\w+")
@HelpUrl("https://github.com/\\w+")
public class GithubRepo {
……
}
这里我们使用的是正则表达式来规定URL范围。可能细心的朋友,会知道.是正则表达式的保留字符,那么这里是不是写错了呢?其实是这里为了方便,WebMagic自己定制的适合URL的正则表达式,主要由两点改动:
例如,https://github.com/*在这里是一个合法的表达式,它表示https://github.com/下的所有URL。
在WebMagic中,从TargetUrl
页面得到的URL,只要符合TargetUrl的格式,也是会被下载的。所以即使不指定HelpUrl
也是可以的——例如某些博客页总会有“下一篇”链接,这种情况下无需指定HelpUrl。
TargetUrl还支持定义sourceRegion,这个参数是一个XPath表达式,指定了这个URL从哪里得到——不在sourceRegion的URL不会被抽取。