Python 爬虫 - scrapy

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 14,385评论 4 46
  • 引言 在上篇使用Scrapy爬取知乎用户信息我们编写了一个单机的爬虫,这篇记录了使用Scrapy-Redis将其重...
    朱晓飞阅读 11,711评论 1 24
  • 背景 部门(东方IC、图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权。前期主要用node做爬虫...
    字节跳动技术团队阅读 12,334评论 1 67
  • 做了三年的读书会,第一次听说读书会系统。这让我这个读书会负责人汗颜。想想这许多年,读书会是如何野生野长出来的。也很...
    玄矶阅读 4,554评论 0 3
  • 我从前总是把钱钟书先生的《围城》和沈从文先生的《边城》搞混,《边城》《围城》傻傻分不清楚。今天终于能分清了,《围城...
    刀笔小吏02阅读 4,151评论 0 3

友情链接更多精彩内容