5

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

 2 years ago
source link: http://www.veiking.cn/blog/1048-page.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

无论是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接口还有很多方法,我们只是列举了一些比较典常用的,其他功能,以后在开发学习的过程中,我们再慢慢发掘。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK