美文网首页
Python 爬虫 - scrapy

Python 爬虫 - scrapy

作者: 莫名ypc | 来源:发表于2019-01-16 20:22 被阅读0次

scrapy

安装

pip install scrapy

框架由5部分组成:
引擎、下载器、spiders、调度器(schedule)、管道(pipeline)

创建scrapy项目

scrapy startproject myscrapy

settings文件中修改是否遵循robots协议

ROBOTSTXT_OBEY = False

创建spider,自动生成first.py

scrapy genspider frist first.com

Spider 属性

name: Spider名字
allowed_domains: 允许爬取的域名
start_urls: Spider启动时爬取的url列表
parse: 负责解析返回的响应,提取数据或进⼀步处理

运行

scrapy crawl football

保存到文件

scrapy crawl first -o first.json

scrapy基于lxml构建,支持xpath,css,正则表达式

Spider

1、 name:爬⾍的名字。

2、 allowed_domains:允许爬取的域名,不在此范围的链接不会被跟进爬取。

3、 start_urls:起始URL列表,当我们没有重写start_requests()⽅法时,就会从这个列表开始爬取。

4、 custom_settings:⽤来存放蜘蛛专属配置的字典,这⾥的设置会覆盖全局的设置。

5、 crawler:由from_crawler()⽅法设置的和蜘蛛对应的Crawler对象, Crawler对象包含了很多项⽬组件,利⽤它我们可以获取项⽬的配置信息,如调⽤crawler.settings.get()⽅法。

6、 settings:⽤来获取爬⾍全局设置的变量。

7、 start_requests():此⽅法⽤于⽣成初始请求,它返回⼀个可迭代对象。该⽅法默认是使⽤GET请求访问起始URL,如果起始URL需要使⽤POST请求来访问就必须重写这个⽅法,发送POST请求使⽤FormRequest⽅法

8、 parse():当Response没有指定回调函数时,该⽅法就会被调⽤,它负责处理Response对象并返回结果,从中提取出需要的数据和后续的请求,该⽅法需要返回类型为Request或Item的可迭代对象(⽣成器当前也包含在其中,因此根据实际需要可以⽤return或yield来产⽣返回值)。

9、 closed():当蜘蛛关闭时,该⽅法会被调⽤,通常⽤来做⼀些释放资源的善后操作。

middleware

1、调度器将Request发给Downloader下载之前,可以对Request进⾏修改process_request(request, spider)

2、下载后⽣成的Response发给Spider之前,可以对Response进⾏修改process_response(request, response, spider)

3、 Downloader或process_request()⽅法异常process_exception(request, exception, spider)

Pipeline

Image pipeline

get_media_requests(self,item, info):
ImagePipeline根据image_urls中指定的url进⾏爬取,可以通过get_media_requests为每个
url⽣成⼀个Request。如:

for image_url in item[‘image_urls’]:
    self.default_headers[‘referer’] = image_url
    yield Request(image_url, headers=self.default_headers)

item_completed(self, results, item, info):
图⽚下载完毕后,处理结果会以⼆元组的⽅式返回给item_completed()函数。这个⼆元组定义
如下:
(success, image_info_or_failure)
其中,第⼀个元素表示图⽚是否下载成功;第⼆个元素是⼀个字典。如:

def item_completed(self, results, item, info):
    image_paths = [x[‘path’] for ok, x in results if ok]
    if not image_paths:
        raise DropItem(“Item contains no images”)
        item[‘image_paths’] = image_paths
    return item

分布式爬虫

爬取队列:使⽤Redis列表或有序集合 (默认是redis有序集合)

去重:使⽤Redis集合保存Request的指纹,提供重复过滤

中断续爬:调度器从Redis队列中取上次没有爬的继续爬取

使用分布式

安装scrapy-redis

pip install scrapy-redis

redis

有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外⼀个值来进⾏⽐较,所
以,对于有序集合,每⼀个元素有两个值,即:值和分数,分数专⻔⽤来做排序。

相关文章

网友评论

      本文标题:Python 爬虫 - scrapy

      本文链接:https://www.haomeiwen.com/subject/nkgydqtx.html