scrapy提供了两种选择器css和xpath,这两种选择器各有长处,下面分别介绍。
CSS选择器
优点:主要用于CSS样式表指定html元素,语法简洁强大,上手学习更容易,因此所有前端工具中都提供了支持。在scrapy也支持CSS选择器语法作为爬虫的元素选择器。大部分CSS选择器都是直接用class和id来定位,不用考虑元素的严格的层级关系,因此语法上比xpath更简洁,使用面也更广一点。
缺点:功能相对简单(但是也能满足99%的需求了),无法选择父级。比如下面例子,我要选择arraw-right上一层的那个a标签,用CSS选择器就无法实现。
<ul class="pagination"> <li class="page-item"> <a class="page-link" href="/previous"> <i class="fa arrow-left"></i> </a> </li> <li class="page-item"> <a class="page-link" href="/next"> <i class="fa arrow-right"></i> </a> </li> </ul>
xpath
优点:CSS选择器实现的功能这里全部支持。而且可以支持更复杂的选择功能,比如向上选择父级。上面例子,我要选择arraw-right上一层的a标签我可以像下面这样干:
//i[contains(@class,"arrow-right")]/..
末尾两个点就表示父级。
据我所知,爬虫领域,用xpath的还是多一点。所以有志于爬虫领域深挖的同学,一定要掌握xpath。
缺点:语法更加复杂,同样功能。用xpath选择比CSS选择要长很多。我们看看两种工具的菜鸟教程就知道,CSS选择器只是CSS教程里面的一页,而xpath是一整套教程。。。