python爬虫scrapy从零开始学习杂记(2)

继续上一篇的例子,已经初步爬取到了整个网页源码,现在要抓取我们所需要的数据。

使用选择器selectors:

首先,在命令行界面打开shell:scrapy shell "http://quotes.toscrape.com/page/1/",回车

#Selector有四个基本的方法:
1.xpath():传入xpath表达式,返回该表达式对应的所有节点的selector list列表
2.css():传入css表达式,返回该表达式对应的所有节点的selector list列表
3.extract():序列化该节点为unicode字符串并返回list
4.re():根据所传入的正则表达式对数据进行提取,返回Unicode字符串list列表
1.xpath的使用

response.xpath('xpath表达式')

#####几个表达式######

/:从根节点选取

//:从匹配的当前节点选择文档中的节点,而不考虑它们的位置

.:选择当前节点

..:选择当前节点的父节点

@:选取属性

几个简单例子:

response.xpath('/html/head/title') --选择HTML文档head元素下的title标签
response.xpath('/html/head/title/text()')--选择title元素下的文本内容
response.xpath('//title')--选择所有title元素
response.xpath('//div[@class="name"')--选择所有包含class="name"的div标签元素
response.xpath('//a[contains(@href,"image")]/@href')--选择属性名称包含image的所有超链接,通过contains实现
2.css的使用

response.css('css表达式')
#####几个简单例子#####

response.css('title::text')--选择title元素下的文本内容
3.extract的使用

respnse.xpath('//ul/li/a/@href').extract()--提取
4.re的使用及正则表达式

正则表达式:1). ——匹配任意除换行符以外的字符;
        2)\d ——匹配数字0-9
        3)\D ——匹配非数字
        4)\s ——匹配空白字符即空格
        5)\S ——匹配非空格
        6)\w ——匹配单词字符
        7)\W ——匹配非单词字符
        8)* ——匹配前一个字符0或无限次
        9)+ ——匹配前一个字符1或无限次
        10)? ——匹配前一个字符0或1次
        11)^ ——匹配字符串开头
        12)$ ——匹配字符串末尾
        13)()——被括号括起来的表达式作为分组,编号从1开始
        14)(?P...)——把...的内容作为分组,除了原有编号外再指定一个别名name
        15)\ ——引用标号为的分组匹配到的字符串
        16)(?P=name)——引用别名为的分组匹配到的字符串
        17){m} ——匹配前一个字符m次
        18){m,n} ——匹配前一个字符m至n次,省略m,则匹配0-n次;省略n,则匹配m至无限次 19)[] ——匹配括号内的所有字符 20)^ ——匹配字符串开头
注意:^出现在[ ]里面是代表否定之意,”[ ]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思。
<这CSDN的编辑器不会用啊。。。。。orz。。。>
在上一个例子中,修改代码:

def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').extract_first(),
                'author': quote.css('small.author::text').extract_first(),
                'tags': quote.css('div.tags a.tag::text').extract(),
            }
运行得到结果
2018-01-29 09:21:55 [scrapy.core.scraper] DEBUG: Scraped from <200 http://quotes.toscrape.com/page/1/>
{'text': u'\u201cIt is our choices, Harry, that show what we truly are, far more than our abilities.\u201d', 
'tags': [u'abilities', u'choices'], 'author': u'J.K. Rowling'}


具体深入的使用参考:http://www.bubuko.com/infodetail-2172861.html,写得很详细
 

你可能感兴趣的:(python爬虫scrapy从零开始学习杂记(2))