Veiking百草园


老狗啃爬虫-便捷的元素定位之Selectable

老狗啃骨头   @Veiking   2020-12-12

老狗啃爬虫-便捷的元素定位之Selectable

摘要:

无论是Jsoup还是Xsoup,都是为了实现HTML页面文件的解析和数据定位,还有正则表达式,根据这些技术原理,WebMagic进一步集成浓缩,将这些我们在爬虫开发过程中使用频率很高的功能,抽提出一个叫Selectable的接口。Selectable可以使我们在操作中简单快捷的完成页面元素的提取,不去关心具体操作细节,而把更多的精力用在爬虫业务的实现上

  书接上文,我们捋过,无论是Jsoup还是Xsoup,都是为了实现HTML页面文件的解析和数据定位,还有正则表达式,根据这些技术原理,WebMagic进一步浓缩提炼,将这些我们在爬虫开发过程中使用频率很高的功能,抽提出一个叫Selectable的接口。
  Selectable可以使我们在操作中简单快捷的完成页面元素的提取,不去关心具体操作细节,而把更多的精力用在爬虫业务的实现上。
  在回顾下我们之前写的那个测试爬虫,代码里我们是通过page.getHtml()获取到一个Html对象,这个对象是实现了Selectable接口的,于是乎,Jsoup、Xsoup等等这些功能,我们都可以直接使用了,接下来我们看看这个Selectable,主要都有些什么方法。

Selectable之提取元素(数据定位)

  下面的这几个方法,主要功能的用于数据元素的提取定位操作,这部分API返回的其实是一个实现了Selectable接口的对象,我们来看看:

方法 说明 示例
xpath(String xpath) 使用XPath选择 html.xpath(“//div[@class=’title’]”)
$(String selector) 使用Css选择器选择 html.$(“div.title”)
$(String selector,String attr) 使用Css选择器选择 html.$(“div.title”,”text”)
css(String selector) 功能同$(),使用Css选择器选择 html.css(“div.title”)
links() 选择所有链接 html.links()
regex(String regex) 使用正则表达式抽取 html.regex(“(.*?)\”)
regex(String regex,int group) 使用正则表达式抽取,并指定捕获组 html.regex(“(.*?)\”,1)
replace(String regex, String replacement) 替换内容 html.replace(“\”,””)

  根据上面这些方法,无论是抓举数据还是提取链接,我们都可以避免在页面穷尽的遍历,方便快捷的将抓取目标精准的定位到具体的元素上,将更多的精力配置在抓取的具体业务逻辑上。

Selectable之数据值获取

  一般说执行完上边的提取定位操作,我们就可以拿到元素值,Selectable接口的以下方法,即可以满足这个功能。

方法 说明 示例
get() 返回一条String类型的结果 String link= html.links().get()
toString() 功能同get(),返回一条String类型的结果 String link= html.links().toString()
all() 返回所有抽取结果 List links= html.links().all()
match() 是否有匹配结果 if (html.links().match()){ xxx; }

  根据这些方法的特点,我们可以发现,如果是单个元素,只有一个结果,我们就可以用.get()方法或.toString(),获取这个元素值;如果是多个元素取值,我们就用.all()方法,即可得到一个链表集合。有时候得到这个元素值并不是最终目的,在爬虫运算的逻辑里,经常会有URL链接对比校验的工作,这里也直接给抽出了一个match()方法,非常方便。

总结

  看完这些接口的方法,我们在回顾之前讲的Jsoup、Xsoup等等,思路应该会非常明晰了,对,知道这些基础,WebMagic框架的使用,爬虫程序的开发肯定会更加得心应手。
  回头再看看之前的代码:

String title = page.getHtml().xpath("//*[@id=\"content\"]/div/div[1]/div[2]/div[1]/h1/a/text()").get();

  是不是感觉通过这样的方式得到title值,非常度便捷高效。
  当然,其实Selectable接口还有很多方法,我们只是列举了一些比较典常用的,其他功能,以后在开发学习的过程中,我们再慢慢发掘。


老狗啃骨头



慷慨发言

(您提供的信息将用于后续必要的反馈联系,本站会恪守隐私)

潜影拾光

陌道向南天

此海之南,有一个美丽的地方,叫台湾。

扫码转发

二维码
二维码
二维码
二维码
二维码
二维码

博文标签