Scrapy爬虫框架笔记(二)

上一篇Scrapy爬虫框架笔记(一)记录了配置环境和Scrapy框架最简单的一个小应用,抓取了网页源码。但是在实际的应用中我们需要的是网页上的部分信息,这时我们需要从源码中提取所需要的数据,就需要使用选择器(Selectors)。通过特定的 XPath 或者 CSS 表达式来“选择” HTML文件中的某个部分。XPath 是一门用来在XML文件中选择节点的语言,也可以用在HTML上。 CSS 是一门将HTML文档样式化的语言。选择器由它定义,并与特定的HTML元素的样式相关连。

构造选择器

为了方便起见,response对象以 .selector 属性提供了一个selector, 您可以随时使用该快捷方法。

使用选择器

Scrapy提供了两个实用的快捷方式: response.xpath()response.css()

>>> response.xpath('//title/text()')
[<Selector (text) xpath=//title/text()>]
>>> response.css('title::text')
[<Selector (text) xpath=//title/text()>]

为了提取真实的原文数据,你需要调用 .extract()

>>> response.xpath('//title/text()').extract()
[u'Example website']
>>> response.xpath('//base/@href').extract()
[u'http://example.com/']
>>> response.css('base::attr(href)').extract()
[u'http://example.com/']

注:Selector 也有一个 .re() 方法,用来通过正则表达式来提取数据。response.css('a::text').re('写正则')。如果前面匹配的是多个对象,那么加上正则也是匹配符合要求的多个对象。这里如果想要匹配第一个对象,可以把re()修改成re_first()即可。

使用相对XPaths

如果你使用嵌套的选择器,并使用起始为 / 的XPath,那么该XPath将对文档使用绝对路径,而且对于你调用的 Selector 不是相对路径。
eg:从div标签中找p标签的内容

>>> divs = response.xpath('//div')#所有的div标签
>>> for p in divs.xpath('//p'):  # 这样会找到从整篇中找p标签
...     print p.extract()
#以下两种方法可以只找div标签下的p标签
>>> for p in divs.xpath('.//p'): 
...     print p.extract()
>>> for p in divs.xpath('p'):
...     print p.extract()

注:有时存在多个相同的标签但我们只想要其中某一个标签的信息,可以使用如下方法。

response.css('div[class="cla"]::text').extract()#获取指定属性的文本

网站爬取不了时候提示403,robots,.txt时,需要忽略robots协议,settings 里有一个robots协议,把那个True改成False就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值