Scrapy使用自带的XPath选择器和CSS选择器来选择HTML文档中特定部分的内容,XPath是用来选择XML和HTML文档中节点的语言,CSS是为HTML文档应用样式的语言,也可以用来选择具有特定样式的HTML元素。使用XPath选择器和CSS选择器解析网页的速度要比BeautifulSoup快一些。
读取目标网页成功后,自动调用回调函数parse(),在回调函数parse()中使用response对象表示服务器返回的网页源代码,response对象的selector属性可以创建相应的选择器对象,然后再调用xpath()或css()方法获取指定的内容,也可以直接使用response对象的xpath()和css()方法进行选择,然后调用get()方法获取第一项结果、调用getall()和extract()方法获取包含所有结果的列表、调用re()和re_first()方法使用正则表达式对提取到的内容进行二次筛选(后者只返回第一项结果)。
表1 XPath选择器常用语法
语法示例 | 功能说明 |
div | 选择当前节点的所有div子节点 |
/div | 选择根节点div |
//div | 选择所有div节点,包括根节点和子节点 |
//ul/li | 选择所有ul节点的子节点li |
//div/@id | 选择所有div节点的id属性 |
//title/text() | 选择所有title节点的文本 |
//div/span[2] | 选择div节点内部的第2个span节点 |
//div/a[last()] | 选择div节点内部最后一个a节点 |
//div/a[last()-1] | 选择div节点内部倒数第二个a节点 |
//a[position()>3] | 选择每组中第4个开始往后的a节点 |
//a[starts-with(@href, "i")] | 选择所有href属性以"i"开头的a节点 |
//a[contains(@href, "image")] | 选择所有href属性中包含"image"的a节点 |
//a[contains(@href, "image") and contains(@href, "4")] | 选择所有href属性同时包含"image"和"4"的a节点 |
//@src | 选择所有节点的src属性 |
//@* | 选择所有节点的任意属性 |
//img[@src] | 选择所有具有src属性的img节点 |
//div[@id="images"] | 选择所有id="images"的div节点 |
//img | //title | 选择所有img和title节点 |
//br//../img | 选择所有br节点的父节点下面的img子节点 |
./img | 选择当前节点中的所有img子节点 |
表2 CSS选择器常用语法
语法示例 | 功能说明 |
#images | 选择所有id=images的所有节点 |
.redText | 选择所有class=redText的节点 |
ul li | 选择所有位于ul节点内部的li子节点 |
ul>li | 选择所有位于ul节点内的直接子节点li |
base+title | 选择紧邻base节点后面的第一个平级title节点 |
br~img | 选择所有与br节点相邻的平级img节点 |
div#images [href] | 选择id=images的div中所有带有href属性的子节点 |
div:not(#images) | 选择所有id不等于images的div节点 |
a:nth-child(3) | 选择第3个a节点 |
a:nth-child(2n+1) | 选择所有第奇数个a节点 |
a:nth-child(2n) | 选择所有第偶数个a节点 |
li:last-child | 选择每组中最后一个li节点 |
li:first-child | 选择每组中第一个li节点 |
[href$=".html"] | 选择所有href属性以".html"结束的节点 |
[href^="image"] | 选择所有href属性以"image"开头的节点 |
a[href*="3"] | 选择所有href属性中包含"3"的a节点 |
联系客服