Scrapy用Cookie实现模拟登录

这是我学习Python爬虫第30天的笔记。

模拟登录是爬取某些站点内容的一个关键,有些网站(特别是论坛类),不登录的话,一个数据也拿不到。

模拟登录有这样几个关键:

  1. 弄清楚登录的url
    一些网站打开出现登录的页面,地址栏大多数不是登录提交表单的url。
  2. 提交登录表单的字段
    登录页面的url和登录表彰的字段名获取的方式有两种:
  1. 分析页面源代码,找到表单标签及属性。适应比较简单的页面,或者对网页代码,js非常熟悉。
  2. 采用抓包工具,查看提交的url和参数,如Chrome的开发者工具中的Network, Fiddler等。这种方式简单粗暴、快速。尤其适应页面比较复杂,登录时经过了几次跳转的。
  1. 登录以后去往页面的url
    这个不是必须的,因为一般都有登录后默认打开的页面,或者你所需要取数据的页面是明确的。但是如果对于第三方登录来讲,这个参数就是必要的。

知道了登录url, 表单的参数后,通过提交参数的方式来实现登录,不难。不是本文讨论的重点。

params = {'uname':'kitty','upass':'hello'}
r = requests.post("http://xxx.org/post", data=params)

一些站点的登录流程还是比较复杂,如代码封装在js中,登录时经过了跳转。那采用以上的方式来实现登录就比较复杂。即使用抓包拿到登录url,表单参数,这时的登录一般还附加了一些其他参数,需要一一构造出来,有的如时间戳等等。

有没有一种比较简单的方式,来成功实现爬虫模拟登录的,然后方便抓取到数据?Cookie就是这样一种方式。不需要知道登录url, 不需要知道登录表单的字段名,以及还需要哪些其他参数。

我以QQ群论坛来说明使用Cookie实现模拟登录,然后抓取数据。打开就是加载的登录div。

你可以找一个登录url和表单字段

以下两种方式,都需要首先拿到Cookie,可以使用Chorme开发者工具,或者Fiddler,在目标网站上使用用户名和密码登录一下,就拿到Cookie了。

找到Cookie

一、用requests发送请求,实现模拟登录

使用requests发送请求时,把cookie作为参数传递进来就可以了。

构造Cookie:

cookie = {'Cookie': 'qm_username=137958873x0; qm_sid=8a4cce2f4413b4a5c9981093942b3f6f,qMUZrWmt0Z0XQbVZWKlNBZXUzT0xCSXJNRHNXU1NDVzd6MXZFQjJSbGZxMF8.; RK=/jt+Uh72a5; pgv_pvid=2786550760; pgv_info=ssid=s5861035317; ptui_loginuin=1379588730; ptisp=ctc; ptcz=e3d339f47c356076793ff4c270b572e35ed69746057039ee2e78677e391793b9; pt2gguin=o1379588730; uin=o1379588730; skey=@ssNmMQP3p; p_uin=o1379588730; p_skey=2w78648Kd9wuwxK9lsiDM02MQFJfSIhEuxhhE*aH-SU_; pt4_token=aGGiHcty94vO0iC8mxQ*OgkHOI6fZmdzQCxsb-baX1U_'}

发达请求时,传递Cookie

html = requests.get(url,cookies=cookie).content

详细可参考,《用Python玩转QQ群论坛》

二、用Scrapy实现模拟登录

在Scrapy中Cookie登录的步骤跟上面一样,但是在实现过来中,却遇到很多困难,一直困扰我,而且在Scrapy中提示不多,如请求被禁止:

getting Forbidden by robots.txt: scrapy

总结一下Scrapy中实现Cookie登录的方法:
1)Cookie的写法不一样:


Cookie

注意,验证登录写在start_requests()方法中,传递cookie参数。

return [FormRequest("http://qgc.qq.com/309o916014x/",cookies=cookies,callback=self.parse)]
  1. 在settings.py中的配置,增加:
ROBOTSTXT_OBEY=False

再次启动爬虫,成功!还是同样的页面,抓取到数据。

论坛帖子更新情况

总结一下,使用Cookie登录的好处:
不需要知道登录url和表单字段以及其他参数,不需要了解登录的过程和细节。由于不是采用登录url, 用户名+密码的方式。配合工具使用,快速方便。

所谓用Cookie实现登录,就把过登录过的信息(包括用户名、密码以及其他的验证信息)打包一起发给服务器,告诉服务器我是登录验证过的。

不足之处,Cookie有过期时间,过一段时间再运行这个爬虫,需要重新获取一下Cookie的值。抓取数据过程是没有问题的。


关于Cookie的介绍:

  1. Cookie分类
    Cookie总是保存在用户客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。Cookie的有效性,最短的浏览器关闭后就消失了,最长是可以一直保存,直到被删除。

  2. Cookie用途
    因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。
    在典型的应用是网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。
    所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器中的状态。

  3. Cookie的缺陷
    1)Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。

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

推荐阅读更多精彩内容