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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

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