scrapy爬虫系列:页面数据查询的三种方式
发布于 作者:苏南大叔 来源:程序如此灵动~scrapy
获取到response
对象后,需要对response
对象进行解析,才能取到后续数据。本文中,苏南大叔将对scrapy
解析数据的几种方式,进行总结说明。这其中包括官方推荐的.css
,.xpath
方式,当然还包括有广大web
程序员早已熟悉的类似jquery
的处理方式。无论你熟悉那种写法,本文中总有一款适合你。
response.css
方式
通过.css
方式获取对象,相信大家都不陌生。但其中涉及的伪类的概念,可就不是那么常见了。
response.css('title')
response.css('title::text').extract()
response.css('title').extract()
response.css('title::text').extract_first()
response.css('title::text')[0].extract()
这里的title
就指的是页面里面的<title></title>
,也就是标签名了。设计到的伪类::text
就指的是闭合HTML标签里面文字内容了。
pagination = response.css(".pagination")[0]
next_page = pagination.css("li.prev-page a::attr('href')").extract_first()
[0].extract()
和extract_first()
基本上是等同的。而相关dom元素有且只有一个的时候,这个语句就又相当于extract()
。
response.xpath
方式
xpath
的方式不如css
的方式更加直观好书写。一般来说,一旦你选择xpath
方式,苏南大叔推荐你选择chrome
的开发者模式,你可以在元素上右键复制xpath
路径。这样的话,就比较好理解这些xpath
表达式了。
response.xpath('//title')
response.xpath('//title/text()').extract_first()
response.xpath('//title/text()')[0].extract()
response.xpath('//td[@class="mc_content"]')
response.xpath('//a[@name="_l_p_n"]/@href'))
xpath
的/text()
就相当于css
的::text
。xpath
的/@href
就相当于css
的::attr('href')
。
当然xpath
里面还有很多高级的使用方式,本文仅仅做个抛砖引玉。更高级的用法,将在以后的文字中进行详细说明。
类似jquery
方式
response.css
方式和jquery
方式,虽然在选择元素上基本一致,但是后续的操作却完全不同了。那么如果您熟悉jquery
的相关函数的话,那么就可以选择这种方法pyquery
,支持类似jquery
的所有元素操作函数,不过这个包并不是原生支持的,需要额外安装pip
包。
pip install pyquery
from pyquery import PyQuery as pq
下面的是个使用范例,熟悉jq
语法的你,从第二条语句时,就可以快速上手了。当然,其实这个pyquery
的语法和phpquery
语法基本上相似度99.9%,与jquery
的语法相似度就略低于99.9%。
content = response.css("article.article-content").extract()[0]
doc = pq(content)
doc(".article-social").remove()
doc("img").removeAttr("class").removeAttr("srcset").removeAttr("sizes")
for img in doc("img"):
src = pq(img).attr("src")
pq(img).attr("src",src+"123")
对比实验
目标数据是页面的description
,分别使用xpath
/css
/pyquery
三种方式获得对应数据。
<meta name="description" content="苏南大叔的博客" />
如何使用.css
/.xpath
/以及类似jquery
的写法,获得description
数据呢?请查看下面的参考答案。
说明一下,strip()
就是大家常见的trim()
函数在python
里面的实现。
总结
scrapy
获取到你想要的页面数据后,就可以持久化到数据库中了。那么scrapy
如何操作数据库呢?请查看苏南大叔的后续文章。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
看看试验
评论测试