《精通Scrapy网络爬虫》第三章

Selector对象


从页面中提取数据的核心技术是HTTP文本解析,在Python中常用Beautiful和lxml模块处理此类问题。Scrapy综合上述两者优点实现了Selector类,它是基于lxml库构建的。Selector类的实现位于scrapy.selector模块。
Selector的使用

创建对象

创建Selector对象时,有两种方法,一是可将页面的HTML文档字符串传递给Selector构造方法的text参数,,例如:
selector = Selector(text=text)
二是使用一个Response对象构造Selector对象,将其传递给Selector构造器方法的response参数,例如:

response = HtmlRespone(url='http://www.example.com',body=body,encoding='utf-8')
selector = Selector(response=response)
选中数据

调用Selector对象的xpath方法或css方法会返回SelectorList对象,SelectorList支持列表接口,可用for语句迭代访问其中的每一个Selector对象。

selector_list = selector.xpath('//h1')
for sel in selector_list:
	print(sel.xpath('./text()'))
提取数据

调用Selector或者SelectorList对象的以下方法可将选中的内容提取:

  • extract()
  • re()
  • extract_first() (SelectorList专有)
  • re_first() (SelectorList专有)

在实际开发中,我们直接使用Response对象内置的Selector对象。Response对象还提供了xpath和css方法,它们在内部分别调用内置Selector对象的xpath和css方法,可使用快捷方式。

response.xpath('.//h1/text()').extract()
response.css('li::text').extract()

XPath


XPath即XML路径语言,它是一种用来确定xml文档中某部分位置的语言。
xml文档的节点有多种类型,最常用的如下:

  • 根节点
  • 元素节点 html、body、div、p、a
  • 属性节点 href
  • 文本节点 helloworld、Click here

节点间的关系:

  • 父子
  • 兄弟
  • 祖先、后裔
基础语法
表达式描述
/选中文档的根
.选中当前节点
选中当前节点的父节点
ELEMENT选中子节点中所有ELEMENT元素节点
//ELEMENT选中h后代节点中所有ELEMENT元素节点
*选中所有元素子节点
text()选中所有文本子节点
@ATTR选中名为ATTR的属性节点
@*选中所有属性节点
[谓语]谓语用来查找某个特定的节点或者包含某个特定值的节点
常用函数
  • position():选中位置大于或者小于或者等于某个值的节点
  • last():选中最后一个
  • string(arg):返回参数的字符串值
  • contains(str1,str2):判断str1中是否包含str2,返回布尔值

CSS选择器


CSS即层叠样式表,其 选择器是一种用来确定HTML文档中某部分位置的语言。

基本语法
表达式描述
*选中所有元素
E选中E元素
E1,E2选中E1和E2元素
E1 E2选中E1后代元素中的E2元素
E1>E2选中E1子元素中的E2元素
E1+E2选中E1兄弟元素中的E2元素
.CLASS选中CLASS属性包含CLASS的元素
#ID选中id属性为ID的元素
[ATTR]选中包含ATTR属性的元素
[ATTR=VALUE]选中包含ATTR属性且值为VALUE的元素
[ATTR~=VALUE]选中包含ATTR属性且值包含VALUE的元素
E:nth-child(n)(E:nth-last-child(n))选中E元素,且该元素必须是其父元素的(倒数)第n个子元素
E:first-child(E:last-child)选中E元素,且该元素必须是其父元素的(倒数)第一个子元素
E:empty选中没有子元素的E元素
E::text选中E元素的文本节点(Text Node)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值