Scrapy+redis实现分布式爬虫简易教程


安装scrapy:

pip3 install -i https://pypi.douban.com/simple/   scrapy

创建scrapy项目:

>>>scrapy startproject ArticleCrawler(工程名)

用编译器打开项目,可以看到项目结构和配置文件如下图所示:

cfg配置文件信息

其中,setting.py是项目的配置文件,pipelines.py是管理数据存储的,items.py类似django中的form,文件夹中的spiders中用于存放爬虫脚本。注意打开settings.py设置是否遵循robots协议。

settings.py

创建爬虫脚本:

打开项目根目录下,运行以下命令来创建一个爬虫脚本:

>>>scrapy genspider jobbole(爬虫名)   blog.jobble.com(目标网站地址)

脚本文件

然后会发现spiders文件夹下出现来一个新的jobbole.py爬虫脚本。其中start_urls中存放的就是所有需要爬取的URL.

创建调试脚本:

在项目根目录下创建一个用于调试的脚本main.py,这个脚本用于模拟在命令行执行命令。然后在文件中输入以下内容:

调试脚本

运行以上脚本等价于在项目根目录下打开命令行运行以下命令:

>>>scrapy crawl jobbole(爬虫名,即对应的爬虫脚本下name = []中的名字)

如果在windows 下报错"ImportError: No module named 'win32api'",则需要先输入以下命令安装一个依赖包:

>>>pip3 install pypiwin32

编写爬虫脚本:

编写爬虫需要用到一些Xpath相关的语法知识,如果不了解Xpath语法的可以参考这篇文章【点我】。

打开项目spider目录下的jobbole脚本,注意其中response 参数是自带 xpath方法的。

spider脚本

Scrapy的shell模式:

打开终端执行以下命令:

>>>scrapy shell URL

在此模式下可以调试分析页面

调试页面

之后执行以下语句可以得到title元素中data的内容

>>>title.extract()

如果访问URL时需要添加headers可以写如下代码:

>>>scrapy shell -s USER_AGENT=""  URL

scrapy也可以通过css选择器来使用

>>>title = response.css('.entry-header')

css里的::text 等价于xpath里的text()

“::text的用法”

编写spider脚本获取列表文章:

打开spiders文件夹下的脚本文件,引入Request类,这个类的作用是通过一个回调函数调参数将爬虫获取的URL传入另一个函数中。

脚本文件

Request()中还有一个参数meta={},用于传递其它数据到回调函数

meta参数的使用

这样就可以在对应到回调函数parse_detail里获取meta里到数据了,

img_url = response.meta.get("front_image_url","") 

配置items文件:

打开items.py文件, 将所有需要获取的字段定义到一个class中,如下图:

定义items

回到脚本文件中,将定义的items引入文件,并创建一个items实例,将对应的数据填充进去,然后通过yield传递到pipelines.py中进行下一步操作。

脚本文件引入items

配置pipelines.py文件:

先打开settings.py文件激活相应的语句。

如果要自动下载图片,可以添加几行,程序便会在 ittems中找到“front_image_url”字段.注意,这里的"front_image_url"是items对象的一个字段。

settings.py

再添加下面几行,则可以设置图片存放路径

设置图片存放路径

运行前,通过pip install pillow安装一下PIL库.

settings.py中设置这两句用于过滤小图片

过滤图片设置

重写pipeline:

可以将上面的类重写到pipelines.py文件中,如下:

pipeline

在 settings.py中用重写到类替换调原本的类:

settings.py

再一次添加pipeline中的内容:

pipeline

将数据保存到本地JSON文件或者Mysql当中:

写入JSON文件

在pipeline中再写一个管道用于将数据存放到json中,代码如下:

pipeline.py

然后在settings.py中进行相应的配置

配置settings.py

另外,我们也可以利用scrapy自带的类来进行json文件的导出:

pipelines.py

然后在settings.py文件中做相同的配置

写入Mysql

先在Mysql中根据数据结构建立相应的数据表,然后在pipelines.py中写入对应的pipeline配置,并在settings.py中配置好。

pipeline.py

Mysql优化方案---连接池:

为了让Mysql的执行的任务变成异步任务,这里引入一个连接池组件

在 settings.py中配置好mysql的信息

MYSQL配置信息
异步数据库

Item loader机制的使用:

在spider脚本中引入item loader

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

推荐阅读更多精彩内容