在学习爬虫的时候,尤其是页面解析的部分,经常会看到标题中的几个名词。在这里简述下它们之间的关系,如果有不对的地方,还请读者指出(如果有人看到的话)。
首先是xpath。xpath是用于在xml文档中搜索元素的路径语言。它是一种语言,在页面解析中,用它来表述要提取的元素的位置。那么怎么使用它呢?最基本的,python自带解析页面的lxml库,Selenium的webdriver,以及scrapy中的Selector在选取元素的时候,都会用到xpath表达式。举个例子,xpath就相当于正则表达式,而这些用它的这些工具就如同python中的re模块。
BeautifulSoup是一个python第三方库,专门用于解析页面。相比于lxml,BeautifulSoup简单容易上手,用法简单(不需要会xpath),但消耗的内存和时间都会比lxml多。BeautifulSoup最主要的两个方法是find_all(包括find)和select。find_all方法是最简单的,select则需要用到css_selector,即CSS选择器。
css_selector可以把它看作是类似xpath的一个东西,它也是一种位置描述语言,通过对标签和css类的描述确定位置。CSS选择器没有xpath应用的那么广,目前我见到的只有BeautifulSoup在用它(select方法)。
Selector则是爬虫框架scrapy中解析页面的一个模块,称之为选择器,可以利用xpath提取元素。不过其实scrapy中的repsonse对象可以直接用xpath提取元素。
最后,简而言之,xpath和css_selector是描述页面元素的语言,而BeautifulSoup和Selector则是解析页面的模块,可以使用前者来寻找页面中的元素。