投稿    登录
  《Python3网络爬虫开发实战》赠书活动正在进行中!详情请戳赠书活动!欢迎参与!非常感谢!

小白进阶之Scrapy第三篇(基于Scrapy-Redis的分布式以及cookies池)

Python 哎哟卧槽 46189浏览 248评论

啥话都不说了、进入正题。

QQ图片20170205084843

首先我们更新一下scrapy版本。最新版为1.3

再说一遍Windows的小伙伴儿 pip是装不上Scrapy的。推荐使用anaconda 、不然还是老老实实用Linux吧

安装Scrapy-Redis

需要注意:

Python 版本为 2.7,3.4 或者3.5 。个人使用3.6版本也没有问题

Redis>=2.8

Scrapy>=1.0

Redis-py>=2.1 。

3.X版本的Python 都是自带Redis-py 其余小伙伴如果没有的话、自己 pip 安装一下。

开始搞事!

开始之前我们得知道scrapy-redis的一些配置:PS 这些配置是写在Scrapy项目的settings.py中的!

请各位小伙伴儿自行挑选需要的配置写到项目的settings.py文件中

英语渣靠Google、看不下去的小伙伴儿看这儿:http://scrapy-redis.readthedocs.io/en/stable/readme.html

继续在我们上一篇博文中的爬虫程序修改:

首先把我们需要的redis配置文件写入settings.py中:

如果你的redis数据库按照前一片博文配置过则需要以下至少三项

第三项请按照你的实际情况配置。

Nice配置文件写到这儿。我们来做一些基本的反爬虫设置

最基本的一个切换UserAgent!

首先在项目文件中新建一个useragent.py用来写一堆 User-Agent(可以去网上找更多,也可以用下面这些现成的)

现在我们来重写一下Scrapy的下载中间件(哇靠!!重写中间件 好高端啊!!会不会好难!!!放心!!!So Easy!!跟我做!包教包会,毕竟不会你也不能顺着网线来打我啊):

 

关于重写中间件的详细情况 请参考 官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/downloader-middleware.html#scrapy.contrib.downloadermiddleware.DownloaderMiddleware

 

在项目中新建一个middlewares.py的文件(如果你使用的新版本的Scrapy,在新建的时候会有这么一个文件,直接用就好了)

首先导入UserAgentMiddleware毕竟我们要重写它啊!

 

开写:

第一行:定义了一个类UserAgentmiddleware继承自UserAgentMiddleware

第二行:定义了函数process_request(request, spider)为什么定义这个函数,因为Scrapy每一个request通过中间               件都会调用这个方法。

QQ20170206-223156

第三行:随机选择一个User-Agent

第四行:设置request的User-Agent为我们随机的User-Agent

^_^Y(^o^)Y一个中间件写完了!哈哈 是不是So easy!

下面就需要登陆了。这次我们不用上一篇博文的FromRequest来实现登陆了。我们来使用Cookie登陆。这样的话我们需要重写Cookie中间件!分布式爬虫啊!你不能手动的给每个Spider写一个Cookie吧。而且你还不会知道这个Cookie到底有没有失效。所以我们需要维护一个Cookie池(这个cookie池用redis)。

好!来理一理思路,维护一个Cookie池最基本需要具备些什么功能呢?

  1. 获取Cookie
  2. 更新Cookie
  3. 删除Cookie
  4. 判断Cookie是否可用进行相对应的操作(比如重试)

好,我们先做前三个对Cookie进行操作。

首先我们在项目中新建一个cookies.py的文件用来写我们需要对Cookie进行的操作。

haoduofuli/haoduofuli/cookies.py:

首先日常导入我们需要的文件:

首先我们把登陆用的账号密码 以Key:value的形式存入redis数据库。不推荐使用db0(这是Scrapy-redis默认使用的,账号密码单独使用一个db进行存储。)

QQ20170207-221128@2x

就像这个样子。

解决第一个问题:获取Cookie:

这段很好懂吧。

使用requests模块提交表单登陆获得Cookie,返回一个通过Json序列化后的Cookie(如果不序列化,存入Redis后会变成Plain Text格式的,后面取出来Cookie就没法用啦。)

第二个问题:将Cookie写入Redis数据库(分布式呀,当然得要其它其它Spider也能使用这个Cookie了)

使用我们上面建立的redis链接获取redis db2中的所有Key(我们设置为账号的哦!),再从redis中获取所有的Value(我设成了密码哦!)

判断这个spider和账号的Cookie是否存在,不存在 则调用get_cookie函数传入从redis中获取到的账号密码的cookie;

保存进redis,Key为spider名字和账号密码,value为cookie。

这儿操作redis的不是上面建立的那个reds链接哦!而是red;后面会传进来的(因为要操作两个不同的db,我在文档中没有看到切换db的方法,只好这么用了,知道的小伙伴儿留言一下)。

spidername获取方式后面也会说的。

还有剩余的更新Cookie  删除无法使用的账号等,大家伙可以自己试着写写(写不出来也没关系 不影响正常使用)

好啦!搞定!简直So Easy!!!!

转载请注明:静觅 » 小白进阶之Scrapy第三篇(基于Scrapy-Redis的分布式以及cookies池)

喜欢 (63)or分享 (0)

想学更多爬虫知识?《Python3网络爬虫开发实战》这本书也许更适合你~

了解详情or立即购买

我的个人微信公众号

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(248)个小伙伴在吐槽
  1. wh0cd225061 buy cheap retin a
    centsmarketplace.com2018-08-14 22:34 (51分钟前)回复
  2. Hello there! I could have sworn I’ve been to thissite before but after checking through some of the post I realized it’s new to me.Anyhow, I’m definitely happy I found it and I’ll be bookmarking and checking back frequently!
    centsmarketplace.com2018-08-14 21:20 (2小时前)回复
  3. wh0cd1336396 best price generic tadalafil
    AaronWed2018-08-13 13:03 (1天前)回复
  4. wh0cd1336396 10 mg abilify
    Kennethlen2018-08-13 11:41 (1天前)回复
  5. I have been browsing online greater than three hours these days, yet I never discovered any attention-grabbing article like yours. It¡¦s beautiful worth sufficient for me. In my view, if all web owners and bloggers made good content material as you did, the internet will be much more useful than ever before.
  6. This is the right webpage for everyone who really wants to understand this topic. You realize soo much its almost tough to argue with you (not thnat I actually will need to…HaHa). You certainly put a new spin on a subject which has been wrirten about for years. Great stuff, just wonderful!
    funny swimming caps2018-08-13 02:58 (2天前)回复
  7. Today, while I was at work, my sister stole my iPad and tested to see if it can survive a forty foot drop, just so she can be a youtube sensation. My apple ipad is now destroyed and she has 83 views. I know this is totally off topic but I had to share it with someone!
    Rx 2 Go Pharmacy2018-08-13 02:47 (2天前)回复
  8. Hello all, here evey one iis sharing these familiarity, thus it's fastidious to read this blog, and I used too go to see this webpage daily.
    best swimming ear plugs reviews2018-08-13 00:44 (2天前)回复
  9. wh0cd82063 kamagra online
  10. [url=http://5hi.in/space-uid-793078.html]adultdating.us.com[/url]
    Dario Batts2018-08-12 06:15 (3天前)回复
  11. Wow, that’s what I was seeking for, what a data! existing here at this weblog,thanksadmin of this web site.
    PluraPage Inc2018-08-11 19:12 (3天前)回复
  12. Pretty component of content. I simply stumbled upon your web site and in accession capital to claim that I get actually loved account your weblog posts. Any way I'll be subscribing on your feeds or even I success you get right of entry to persistently fast.
    Rx2go.com2018-08-11 15:22 (3天前)回复
  13. wh0cd1336396 kamagra
    AaronWed2018-08-11 14:05 (3天前)回复
  14. wh0cd1336396 cymbalta
    Kennethlen2018-08-11 13:55 (3天前)回复
  15. Hello there, just became alert to your blog through Google, and found that it is really informative. I am goiung to watch out for brussels. I will be grateful if you continue this in future. Lots of people will be benefited from your writing. Cheers!
    roqya2018-08-11 12:26 (3天前)回复
1 14 15 16