下面将介绍一些内置的的Processor。
1. Identity
Identity
是最简单的Processor,不进行任何处理,直接返回原来的数据。
2. TakeFirst
TakeFirst
返回列表的第一个非空值,类似extract_first()
的功能,常用作Output Processor,如下所示:
from scrapy.loader.processors import TakeFirst
processor = TakeFirst()
print(processor([‘’, 1, 2, 3]))
输出结果如下所示:
1
经过此Processor处理后的结果返回了第一个不为空的值。
3. Join
Join
方法相当于字符串的join()
方法,可以把列表拼合成字符串,字符串默认使用空格分隔,如下所示:
from scrapy.loader.processors import Join
processor = Join()
print(processor([‘one’, ‘two’, ‘three’]))
输出结果如下所示:
one two three
它也可以通过参数更改默认的分隔符,例如改成逗号:
from scrapy.loader.processors import Join
processor = Join(‘,’)
print(processor([‘one’, ‘two’, ‘three’]))
运行结果如下所示:
one,two,three
4. Compose
Compose
是用给定的多个函数的组合而构造的Processor,每个输入值被传递到第一个函数,其输出再传递到第二个函数,依次类推,直到最后一个函数返回整个处理器的输出,如下所示:
from scrapy.loader.processors import Compose
processor = Compose(str.upper, lambda s: s.strip())
print(processor(’ hello world’))
运行结果如下所示:
HELLO WORLD
在这里我们构造了一个Compose Processor,传入一个开头带有空格的字符串。Compose Processor的参数有两个:第一个是str.upper
,它可以将字母全部转为大写;第二个是一个匿名函数,它调用strip()
方法去除头尾空白字符。Compose
会顺次调用两个参数,最后返回结果的字符串全部转化为大写并且去除了开头的空格。
5. MapCompose
与Compose
类似,MapCompose
可以迭代处理一个列表输入值,如下所示:
from scrapy.loader.processors import MapCompose
processor = MapCompose(str.upper, lambda s: s.strip())
print(processor([‘Hello’, ‘World’, ‘Python’]))
运行结果如下所示:
[‘HELLO’, ‘WORLD’, ‘PYTHON’]
被处理的内容是一个可迭代对象,MapCompose
会将该对象遍历然后依次处理。
6. SelectJmes
SelectJmes
可以查询JSON,传入Key,返回查询所得的Value。不过需要先安装Jmespath库才可以使用它,命令如下所示:
pip3 install jmespath
安装好Jmespath之后,便可以使用这个Processor了,如下所示:
from scrapy.loader.processors import SelectJmes
proc = SelectJmes(‘foo’)
processor = SelectJmes(‘foo’)
print(processor({‘foo’: ‘bar’}))
运行结果如下所示:
bar
以上内容便是一些常用的Processor,在本节的实例中我们会使用Processor来进行数据的处理。
接下来,我们用一个实例来了解Item Loader的用法。
三、本节目标
我们以中华网科技类新闻为例,来了解CrawlSpider和Item Loader的用法,再提取其可配置信息实现可配置化。官网链接为:http://tech.china/。我们需要爬取它的科技类新闻内容,链接为:http://tech.china/articles/,页面如下图所示。
我们要抓取新闻列表中的所有分页的新闻详情,包括标题、正文、时间、来源等信息。
四、新建项目
首先新建一个Scrapy项目,名为scrapyuniversal,如下所示:
scrapy startproject scrapyuniversal
创建一个CrawlSpider,需要先制定一个模板。我们可
下面将介绍一些内置的的Processor。
1. Identity
Identity
是最简单的Processor,不进行任何处理,直接返回原来的数据。
2. TakeFirst
TakeFirst
返回列表的第一个非空值,类似extract_first()
的功能,常用作Output Processor,如下所示:
from scrapy.loader.processors import TakeFirst
processor = TakeFirst()
print(processor([‘’, 1, 2, 3]))
输出结果如下所示:
1
经过此Processor处理后的结果返回了第一个不为空的值。
3. Join
Join
方法相当于字符串的join()
方法,可以把列表拼合成字符串,字符串默认使用空格分隔,如下所示:
from scrapy.loader.processors import Join
processor = Join()
print(processor([‘one’, ‘two’, ‘three’]))
输出结果如下所示:
one two three
它也可以通过参数更改默认的分隔符,例如改成逗号:
from scrapy.loader.processors import Join
processor = Join(‘,’)
print(processor([‘one’, ‘two’, ‘three’]))
运行结果如下所示:
one,two,three
4. Compose
Compose
是用给定的多个函数的组合而构造的Processor,每个输入值被传递到第一个函数,其输出再传递到第二个函数,依次类推,直到最后一个函数返回整个处理器的输出,如下所示:
from scrapy.loader.processors import Compose
processor = Compose(str.upper, lambda s: s.strip())
print(processor(’ hello world’))
运行结果如下所示:
HELLO WORLD
在这里我们构造了一个Compose Processor,传入一个开头带有空格的字符串。Compose Processor的参数有两个:第一个是str.upper
,它可以将字母全部转为大写;第二个是一个匿名函数,它调用strip()
方法去除头尾空白字符。Compose
会顺次调用两个参数,最后返回结果的字符串全部转化为大写并且去除了开头的空格。
5. MapCompose
与Compose
类似,MapCompose
可以迭代处理一个列表输入值,如下所示:
from scrapy.loader.processors import MapCompose
processor = MapCompose(str.upper, lambda s: s.strip())
print(processor([‘Hello’, ‘World’, ‘Python’]))
运行结果如下所示:
[‘HELLO’, ‘WORLD’, ‘PYTHON’]
被处理的内容是一个可迭代对象,MapCompose
会将该对象遍历然后依次处理。
6. SelectJmes
SelectJmes
可以查询JSON,传入Key,返回查询所得的Value。不过需要先安装Jmespath库才可以使用它,命令如下所示:
pip3 install jmespath
安装好Jmespath之后,便可以使用这个Processor了,如下所示:
from scrapy.loader.processors import SelectJmes
proc = SelectJmes(‘foo’)
processor = SelectJmes(‘foo’)
print(processor({‘foo’: ‘bar’}))
运行结果如下所示:
bar
以上内容便是一些常用的Processor,在本节的实例中我们会使用Processor来进行数据的处理。
接下来,我们用一个实例来了解Item Loader的用法。
三、本节目标
我们以中华网科技类新闻为例,来了解CrawlSpider和Item Loader的用法,再提取其可配置信息实现可配置化。官网链接为:http://tech.china/。我们需要爬取它的科技类新闻内容,链接为:http://tech.china/articles/,页面如下图所示。
我们要抓取新闻列表中的所有分页的新闻详情,包括标题、正文、时间、来源等信息。
四、新建项目
首先新建一个Scrapy项目,名为scrapyuniversal,如下所示:
scrapy startproject scrapyuniversal
创建一个CrawlSpider,需要先制定一个模板。我们可