编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

爬虫神器,webmagic网页内容如何解析?

wxchong 2024-09-22 16:45:24 开源技术 14 ℃ 0 评论

Webmagic介绍和快速上手见文章《爬虫神器,WebMagic是也!》、《爬虫神器,WebMagic快速上手》。

在webmagic中主要使用Jsoup和Xsoup来对网页内容进行解析。

1、Jsoup和Xsoup

WebMagic的抽取主要用到了Jsoup和我自己开发的工具Xsoup。

1.1 Jsoup

Jsoup是一个简单的HTML解析器,同时它支持使用CSS选择器的方式查找元素。为了开发WebMagic,我对Jsoup的源码进行过详细的分析,具体文章参见Jsoup学习笔记。

1.2 Xsoup

Xsoup是我基于Jsoup开发的一款XPath解析器。

之前WebMagic使用的解析器是HtmlCleaner,使用过程存在一些问题。主要问题是XPath出错定位不准确,并且其不太合理的代码结构,也难以进行定制。最终我自己实现了Xsoup,使得更加符合爬虫开发的需要。令人欣喜的是,经过测试,Xsoup的性能比HtmlCleaner要快一倍以上。

Xsoup发展到现在,已经支持爬虫常用的语法,以下是一些已支持的语法对照表:

Name

Expression

Support

nodename

nodename

yes

immediate parent

/

yes

parent

//

yes

attribute

[@key=value]

yes

nth child

tag[n]

yes

attribute

/@key

yes

wildcard in tagname

/*

yes

wildcard in attribute

/[@*]

yes

function

function()

part

or

a | b

yes since 0.2.0

parent in path

. or ..

no

predicates

price>35

no

predicates logic

@class=a or @class=b

yes since 0.2.0

另外我自己定义了几个对于爬虫来说,很方便的XPath函数。但是请注意,这些函数式标准XPath没有的。

Expression

Description

XPath1.0

text(n)

第n个直接文本子节点,为0表示所有

text() only

allText()

所有的直接和间接文本子节点

not support

tidyText()

所有的直接和间接文本子节点,并将一些标签替换为换行,使纯文本显示更整洁

not support

html()

内部html,不包括标签的html本身

not support

outerHtml()

内部html,包括标签的html本身

not support

regex(@attr,expr,group)

这里@attr和group均可选,默认是group0

not support

1.3 Saxon

Saxon是一个强大的XPath解析器,支持XPath 2.0语法。webmagic-saxon是对Saxon尝试性的一个整合,但是目前看来,XPath 2.0的高级语法,似乎在爬虫开发中使用者并不多。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表