scrapy带cookie登录简单的网站

在爬数据的时候,登录一直是一个比较麻烦的问题。我也一直在网上找过各种资料,都挺麻烦的,因为需要分析各种http过程,感觉太麻烦了。

不过最近在一个同学的帮助下,找到了使用cookie登录的方法。因为带cookie登录的话,server会认为你是一个已登录的用户,所以就会返回给你一个已登录的内容

本文介绍的方法,是使用python的scrapy框架登录的方法。而且也只能登录一些比较简单的网站,对于那种大型的网站,因为目前我也还没有验证过,所以不敢保证。但是经过验证,登录豆瓣是万试万灵的。

1. 获取cookie

这个是整个任务的关键所在。只有获得了cookie才能进行下一步的编码工作。cookie获取的大致过程是自己先手动登录一次你想要的网站,然后记录想登录过程中的cookie就可以了。而想要获取这个cookie,也有两种方法。

1.1 chrome方法——简单粗暴

进入豆瓣首页后,F12-Network,就可以看到如上的截图。在这个截图中我们可以看到待会登录过程中各种http的请求的详细信息。注意右下角的红色按钮是红色的,红色表示正在记录,如果不是红色的话。。。就把它按一下保证是红色的就可以了。

在登录框中输入用户名和密码后就会看到下面的Network中出现了一大排的内容,如下图所示:

上图是登录成功后的截图,我们可以看到原本Network中的内容是空的,现在已经出现了很多了。为了防止不断出现内容干扰我们的分析,(其实不会干扰,但还是)将刚才的红色按钮关闭,也就是不再记录http消息,如上图中的灰色按钮。

然后这个时候我们就可以好好分析一下,在Network下的Name列中,从哪一项中我们才可以找到cookie了。

我们可以看到(如果出现了很多的话,就把滚动条拉到最上面可以看到)前面几行,除了第二行的“www.douban.com”是text/html类型的,其他的都是些网页的辅助内容,如css和图片。这样呢,我们可以想着说,cookie有可能是在这个html类型的项中,所以我们把“www.douban.com”点击一下,可以得到如下的图片:

咦?我们在Headers中的Request Headers中找到了cookie诶?现在先假设它能用吧,我们要找的就是他了。那么我们就可以进入到第2步写代码了。

1.2 chrome获取cookie的方法简单粗暴,但是还有另外一种方法也是可以的,不过必须要firefox浏览器,叫做firebug的一个插件工具。这个需要大家自己装一下,挺简单的。

打开以后会出现如上所示的样子,现在还什么都没有。如果想要抓取http通信或者cookie的话,需要要左上角的“start”打开,表示需要firebug进行记录通信内容了。

这时就可以开始登陆了,登陆后相应的会出现很多firebug截取的内容,如下图:

这时我们可以看到,在最上面的一栏中,出现了firebug截取到通信内容,和我们在chrome中看到的内容似乎是一样的。所以我们还是选择“http://www.douban.com”这一项。然后下面一栏中Headers, Cookies之类的就会出现相应的内容。我们要找的内容当然在cookies中,就如上图所示的样子。

我们可以看到,在firebug中获取的cookies的内容,似乎比chrome中获取的内容要少得多。但是没关系,chrome中的内容冗余比较多,只需要firebug中截取的cookies的内容就够了。

然后我们就开始进入到编码阶段了。

2. 编码

# -*- coding:UTF-8 -*-
import re
import json
import codecs
from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy import log

from douban.items import DoubanItem

import sys
default_encoding = ‘utf-8‘
reload(sys)
sys.setdefaultencoding(default_encoding)

class SanzhaSpider(Spider):
  name = "douban"
  allowed_domains = ["http://www.douban.com"]
  def start_requests(self):
      yield Request(response.url,cookies={‘viewed‘:‘"1083428"‘, ‘__utmv‘:‘30149280.3975‘}, callback=self.parse_with_cookie)

  def parse_with_cookie(self, response):
      file = codecs.open(‘page.html‘, ‘w‘, encoding=‘utf-8‘)
      file.write(response.body)
      file.close()

插入代码的内容就如上所示,最重要的方法就是重写的“start_requests”方法。这个方法就不在这里详细讲了,大家可以去官网看。只解释下Request方法的3个参数

url #要带cookie访问的网页的url
cookies #这是我们前面讨论了很久才获取的cookie的键值对的内容,需要按照一定的格式描述
callback #当我们提交了这个request请求并获得了相应的response后,我们应该用什么方法去处理返回的response,处理的方法就是callback中给出的方法

好了,按照这种方法,大家就可以顺利的登录豆瓣了。

补充:

1. 当我们抓取登录时http通讯内容时,有那么多的项都会有cookie的内容,为什么我们唯独选择“http://www.douban.com”这一项中的cookie内容呢?

其实这个问题我也没有太明白,如果对于比较复杂的网站,如淘宝新浪之类的,应该没有这么简单。需要后续的深入研究才能解答这个问题。

2. 那应该如何选择正确的cookie内容呢?

额,,,试一试就好了,反正我试过其他的cookie内容,并不能成功。

3. 豆瓣登录有时候可能需要验证码,这个是没关系的,你获取带验证码登录的cookie就没问题了。

  

Bon Appetite!

scrapy带cookie登录简单的网站

时间: 2024-08-05 22:41:47

scrapy带cookie登录简单的网站的相关文章

Scrapy 采集需要登录注册的网站

#!/usr/bin/py2 # -*- coding: utf-8 -*- #encoding=utf-8 from bs4 import BeautifulSoup from scrapy.http import Request, FormRequest from spider_test.items import * from scrapy.spiders import CrawlSpider from spider_test import settings # @author Funsio

HttpClient 4.1.3 初学篇---使用Get和Post模拟登录简单页面(分别带参数)

最近需要解决的问题需要用到Httpclient,模拟登陆网站!成功之后就可以用代码的方式获取网站内容或者发送请求,类似网络爬虫. 但是在网上找了好多篇Blog,发现每一片的写法都不一样,也纠结了些时间,很纳闷,才发现Httpclient版本不一样...现在在这里说明我使用的版本是HttpClient 4.1.3,我已上传下载 看了些Blog,发现直接访问大型的网站不太容易,于是就自己写了小的站点,只有一个Servlet,来接受参数(用户名和密码)就ok了! 这个Servlet就只有get与pos

js利用cookie登录网站

如上图,我们获取到了cookie,接下来利用cookie登录相应的网站. 我用的浏览器是火狐,首先在特定的网站(也就是我们发现XSS漏洞的网站,这里指的是pikachu)F12打开开发者工具,找到控制台,在最下面输入: document.cookie = "PHPSESSID=ku7dfhu5cbidad45lsu6d1oabd"; 一般会有一个提示:不允许我们粘贴,我们先在命令行输入 allow pasting即可粘贴了 之后刷新页面即可伪造受害者的身份进行登录. 因为这里用的是pi

ASP.Net Core 2.1+ Cookie 登录授权验证【简单Cookie验证】

原文:ASP.Net Core 2.1+ Cookie 登录授权验证[简单Cookie验证] 介绍 本文章发布于博客园:https://www.cnblogs.com/fallstar/p/11310749.html 作者:fallstar 本文章适用于:ASP.NET Core 2.1 + 今天想给一个asp.net core 的项目加上权限验证,于是研究了一下怎么加, 折腾了好一阵,发现原来Filter的方式被放弃了,现在使用Policy 和 Scheme 的方式来校验了... 然后开始猛查

一个Cookie登录的示例

这个示例会用到Cookie.HTML表单.POST数据体(body)解析. 这个版本使用JSON数据,下个版本使用mysql和mongodb 示例准备 1. 使用express创建应用 就下面的命令序列: express LoginDemo cd LoginDemo cnpm install 2. 登录页面 登录页面的jade模板为views/login.jade,内容如下: doctype html html head meta(charset='UTF-8') title Login lin

python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

操作环境:python3 在上一文中python爬虫scrapy框架--人工识别登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前的文章便于理解 本文将介绍如何用scrapy来登录知乎. 不多说,直接上代码: import scrapy import re import json class ZhihuSpider(scrapy.Spider): name = 'zhihu' allowed_domains = ['www.zhi

用微信二维码登录自己的网站

地址:http://www.cnblogs.com/loogn/p/3727953.html用微信二维码登录自己的网站 一.当用户选择用微信二维码登录时,我们要在用户页面里生成一个guid做为客户端的唯一标识,然后带着这个guid请求二维码图片地址,得到地址后,显示给用户.请求到后台的时候要将此二维码的Key和客户端的guid关联到一起.注意这个key的生成方式,要保证多人同时用二维码登录而不冲突,比如用10000自增,隔断时间又重置到10000. 二.得到二维码后,马上发出长链接请求登录标识(

php 带cookie登陆

<?php /** * @version $id */ define('SCRIPT_ROOT',dirname(__FILE__).'/'); $act = trim($_REQUEST['act']); switch($act) { case 'login': // 获取验证码 $code = trim($_REQUEST['code']); // $loginParams为curl模拟登录时post的参数 $loginParams['act'] = 'login'; $loginParam

第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

第三百三十三节,web爬虫讲解2-Scrapy框架爬虫-Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其