Python爬虫大数据采集与挖掘-6.ppt
html5parser中定义的HTMLParser类对于解析HTML而言是比较重要的,它的声明如下是:html5lib.html5parser.HTMLParser(tree=None,strict=False,namespaceHTMLElements=True,debug=False)程序设计方法(1)直接通过html5lib执行parse方法,该方法返回一颗解析好的etree,然后就可以etree的xpath方法来指定要提取的内容的路径,从而获取信息。(2)如果要处理的页面比较多,使用第一种方法需要重复些parse方法的一些同样参数,为此,可以先使用html5lib.HTMLParser构造一个解析器,然后执行该解析器的parse方法去处理不同页面。(3)有时候,要提取的信息难于用xpath的路径来表达,例如要提取Web页面中所有超链接时,针对每个超链接写一个路径固然可以,但是编程效率太低。这种情况下可以利用etree的模式匹配能力,运用findall等方法从HTML文档中找出所有符合条件的标签。(4)对于html5lib来说,其最大的优势在于具备处理不完整、不规范、有错误标签的HTML文档,能够进行自动修复,因此在一些场合下使用html5lib进行Web页面信息提取具有一定优势。BeautifulSoupBeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,目前最新版本为BeautifulSoup4.7.1,简称为bs4,即BeautifulSoup4。bs4是一个包(package),其中包含了BeautifulSoup、EntitySubstitution、builder、AnnouncingParser等类。这些类中,BeautifulSoup使用得最多,因此很多人就认为BeautifulSoup和bs4是一样,但其实不然。BeautifulSoup将HTML文档转换成一个树形结构,尽管结构上可能比较复杂,但是从程序设计角度看,只要处理四种类型的Python对象:Tag、NavigableString、BeautifulSoup和Comment。建议重点掌握CSS选择器这种方式使用select方法,允许通过标签名、类名、id名、以及组合查找、子标签查找。在查找时,最重要的模式是由标签名、类名、id和子标签组成。标签名不加修饰,类名前加点,id名前加#,子标签通过或空格定义。相比于xpath,CSS也提供了很简洁的选择方式,在Web信息提取中广泛应用。一些例子如下:soup.select(title)#通过标签名soup.select(.sister)#通过类名查找soup.select(#link1)#通过id名查找soup.select(p#link1)#组合查找soup.select(headtitle)#直接子标签查找(前后加空格)soup.select(.list#link1)#class名称为list的标签节点下id名称为link1的子节点select方法返回的结果是list类型,可以通过下标和text属性来得到内容,例如:soup.select(title)[0].text这个语句获得页面的title内容。特别地,如果类名本身带有空格,则应该用点代替其中的空格,例如:对于divclass=zwliclearfix的选择,应该使用soup.select(div.zwli.clearfix)PyQueryPyQuery是一个主要的python库,它具有类似于JavaScript框架jQuery的功能。PyQuery使用lxml解析器在xml和html文档上进行操作,并提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用也非常方便。官方文档在/pyquery/可查阅。实例见教材提纲Web信息提取任务及要求Web页面内容提取的思路基于HTML结构的内容提取方法基于统计的Web内容抽取方法基于JSON的web信息提取Web信息存储网站也会经常升级改版,由此导致写好的程度针对新版失效了。提取程序就需要有一定的智能性,能够自动识别某个WEB页面上的正文位置,其前提是在没有人工参与的情况下。其基本步骤如下:构建HTML文档对应的DOM树;基于某种特征来构建基于DOM树的信息提取规则;按照规则,从HTML中提取信息。规则的制定或生成方法有以下两种。第一种,是通过启发式方法。一般通过人工对HTML页面进行观察和总结,以DOM树所确定的基本组成单位为规则中的特征,人工估计其对应的特征值,从而形成启发式规则