python爬虫scarpy框架详解

1. scrapy图解

流程图

Scrapy中的数据流由执⾏引擎控制,其过程如下:
1、scrapy引擎打开网页,返回requsts请求
2、引擎从Spider中获取到第⼀个要爬取的URL并在调度器(Scheduler)以Request调度。
3、引擎向调度器请求下⼀个要爬取的URL。
4、调度器返回下⼀个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)⽅向:可以对request进行重构)转
发给下载器(Downloader)。
5、⼀旦⻚⾯下载完毕,下载器⽣成⼀个该⻚⾯的Response,并将其通过下载中间件(返回
(response)⽅向)发送给引擎。
6、引擎从下载器中接收到Response并通过Spider中间件(输⼊⽅向)发送给Spider处理。(将响应返回,并用蜘蛛spider解析)
7、Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。(返回解析后的数据给引擎由引擎分发到PIPLINES,同时还可以返回requests对象,可以进行下一步爬取,或者获取url等)
8、引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度
器。(管道PIPLINES多数作用是将数据存放,可以写多个管道,存放在各个数据库中,最后需要在settings文件中配置管道)
9、(从第⼆步)重复直到调度器中没有更多地request,引擎关闭该⽹站。(多用于打开详情页面,并去访问)

2. windows安装scrapy

2.1 windows安装依赖whl文

点击下载whl文件:根据python版本与操作系统位数选择下载:

查看版本和位数

下载

2.2. 处理whl文件

将whl文件放在任意盘,全英文目录.
进入该目录.
pip install Twisted-18.9.0-cp37-cp37m-win_amd64.whl(需要进入虚拟环境再进该目录)
然后.
pip install pypiwin32
最后.
pip install scrapy

注:苹果,linux系统下,直接使用pip install scrapy 下载

3. 创建项目

3.1 进入虚拟环境到任意存放项目的位置

scrapy startproject myscrapy

3.2 进入项目目录中,创建爬虫

scrapy genspider (爬虫名字:football) (域名:如.sports.sina.com.cn)

3.3 项目目录结构为:

层次结构

3.4 项目创建后需要的配置信息

修改该文件settings.py:

  1. 配置不遵循爬虫协议
 ROBOTSTXT_OBEY = False
  1. 配置为中文格式(utf-8)
# 保证获取的数据为中文不乱码
FEED_EXPORT_ENCODING = 'utf-8'
  1. 数据库信息配置(需要的时候才配置)
# mysql setting
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3307
MYSQL_USERNAME = 'root'
MYSQL_PASSWORD = '123456'
MYSQL_DATABASE = 'u17'
# MONGO setting
MONGODB_URI = 'mongodb://127.0.0.1:27017'
MONGODB_DATABASE = 'u17'
  1. 配置管道文件生效(后面的参数代表执行顺序,数值越小,执行越靠前)
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'u17.pipelines.U17MysqlPipeline': 300,
    'u17.pipelines.U17MongoPipeline': 320,
    'u17.pipelines.U17ImagePipeline': 340,

}
  1. 配置图片管道保存图片的位置
IMAGES_STORE = './images'

3.5 项目运行

运行前注意:当前目录是在项目根目录中,输入dir出现cfg的配置文件就代表在根目录.
scrapy crawl football
scrapy crawl football -o result.json(运行并将item中的字段循环写入json文件中)

3.6 项目地址

爬取u17动漫两万多条数据,利用scrapy框架,存取图片,存放json,存mysql,存MongoDB.
github

3.7 小技巧

使用 scrapy shell 网址 进入交互式环境

4. 更换代理

4.1 在中间件中更换代理:middleware(优点:可使用免费代理,缺点:代理利用不充分)

说明:在此处更换代理类似也就是说在request与Downloader之间更换,每次请求页面都会换代理。所以在爬取数据的时候很容易访问失败,所以必须多爬几次,但是多爬几次就会产生重复数据。这时就考虑在数据库中给每条数据的唯一性标志设上唯一性索引。
代码:


4.2 在请求重构处更换代理:spider

代码:

elif isinstance(result_json, dict):
            if result_json.get('code') == 401:

                proxies = proxy_helper.get_proxy()
                url = response.meta.get('url')
                headers = self.get_headers()

                yield Request(url=url, callback=self.parse, headers=headers,
                              meta={'proxy': proxies, 'url': url}, dont_filter=True)

使requests不被过滤

1. 在 allowed_domains 中加入 url 

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

推荐阅读更多精彩内容