http://blog.csdn.net/pipisorry/article/details/47948065

实战1:使用cookie登录哈工大ACM网站

获取网站登录地址

http://acm.hit.edu.cn/hoj/system/login

查看要传送的post数据

user和password

Code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = 'pi'
__email__ = 'pipisorry@126.com'

"""
import urllib.request, urllib.parse, urllib.error
import http.cookiejar

LOGIN_URL = 'http://acm.hit.edu.cn/hoj/system/login'
values = {'user': '******', 'password': '******'} # , 'submit' : 'Login'
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
headers = {'User-Agent': user_agent, 'Connection': 'keep-alive'}

cookie_filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
    response = opener.open(request)
    page = response.read().decode()
    # print(page)
except urllib.error.URLError as e:
    print(e.code, ':', e.reason)

cookie.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中
print(cookie)
for item in cookie:
    print('Name = ' + item.name)
    print('Value = ' + item.value)

get_url = 'http://acm.hit.edu.cn/hoj/problem/solution/?problem=1'  # 利用cookie请求访问另一个网址
get_request = urllib.request.Request(get_url, headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())
# print('You have not solved this problem' in get_response.read().decode())

Note:

1. 直接open http://acm.hit.edu.cn/hoj/problem/solution/?problem=1页面不知道去哪了,根本不是直接用浏览器登录后的界面!用cookie登录就可以正常访问,html代码中会有一句话you have not solved this problem,因为我没做这道题。

2. 原理:创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。查看登录之后才能看到的信息。[python
3.3.2 爬虫记录
]

重复使用cookie登录

上面代码中我们保存cookie到文件中了,下面我们可以直接从文件导入cookie进行登录,不用再构建包含用户名和密码的postdata了


import urllib.request, urllib.parse, urllib.error
import http.cookiejar

cookie_filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(cookie_filename)
cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True)
print(cookie)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)

get_url = 'http://acm.hit.edu.cn/hoj/problem/solution/?problem=1'  # 利用cookie请求访问另一个网址
get_request = urllib.request.Request(get_url)
get_response = opener.open(get_request)
print(get_response.read().decode())

皮皮Blog

实战2:使用cookie登录伯乐在线

获取网站登录地址

1. chrome浏览器中按F12审查元素 > Network > Headers > General > Request URL: http://www.jobbole.com/login/?redirect=http://www.jobbole.com/

然而这个并不是其真实网站登录网址^-^

2. 也可以下载软件Fiddler
for .NET2
查看相关信息。运行python程序访问和直接在浏览器中刷新都可以在fiddler中找到相关信息。

Note: fiddler其实是抓包用的,是独立的工具。类似这种前端登录动作,也可以用casperjs。还可以用HttpWatch浏览器嵌入工具。

查看200所在的条目(200:请求成功      处理方式:获得响应的内容,进行处理)

下面是登录后看到的request中有webforms的信息对应的网址是也就是其真实网站登录网址http://www.jobbole.com/wp-admin/admin-ajax.php

(吓死爷了,第一次上传竟然忘了把密码遮住!)

查看要传送的post数据

1. 上面使用fiddler看到的webforms就是登录要用的post数据要包含的(其中redict_url是可以不加上去的)

2. 或者使用浏览器Elements > html文档中所要提交的数据有name和password,然而这个并不是真实的post数据^-^

查看headers信息

如果不自己添加headers信息中的User-Agent,python代码登录时会默认使用User-Agent: Python-urllib/3.4

我们在chrome浏览器中按F12审查元素 > Network > Headers中可以看到User-Agent应该设置为:'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'

一般要添加的headers信息有:

'Host': '', 'Accept': '', 'User-Agent': '', 'Accept-Language': '', Accept-Encoding

登录后查看request headers

发现cookie发生了变化,加上了用户名***和密码*************

Cookie:
wordpress_test_cookie=WP+Cookie+check
Cookie:
wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_0efdf49af511fd88681529ef8c2e5fbf=****%7C1440690138%*********************
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'pi'
__mtime__ = '8/23/2015-023'
__email__ = 'pipisorry@126.com'
# code is far away from bugs with the god animal protecting
    I love animals. They taste delicious.
              ┏┓      ┏┓
            ┏┛┻━━━┛┻┓
            ┃      ☃      ┃
            ┃  ┳┛  ┗┳  ┃
            ┃      ┻      ┃
            ┗━┓      ┏━┛
                ┃      ┗━━━┓
                ┃  神兽保佑    ┣┓
                ┃ 永无BUG!   ┏┛
                ┗┓┓┏━┳┓┏┛
                  ┃┫┫  ┃┫┫
                  ┗┻┛  ┗┻┛
"""
import urllib.request, urllib.parse, urllib.error
import http.cookiejar

LOGIN_URL = 'http://www.jobbole.com/wp-admin/admin-ajax.php'
get_url = 'http://www.jobbole.com/'  # 利用cookie请求访问另一个网址

values = {'action': 'user_login', 'user_login': '*****', 'user_pass': '******'}
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
headers = {'User-Agent': user_agent}

cookie_filename = 'cookie_jar.txt'
cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
    response = opener.open(request)
    # print(response.read().decode())
except urllib.error.URLError as e:
    print(e.code, ':', e.reason)

cookie_jar.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中
for item in cookie_jar:
    print('Name = ' + item.name)
    print('Value = ' + item.value)

get_request = urllib.request.Request(get_url, headers=headers)
get_response = opener.open(get_request)
print('个人主页' in get_response.read().decode())

Note:

1. cookie登录不成功则会输出:
Name = wordpress_test_cookie
Value = WP+Cookie+check
这个就说明之前根本没有登录成功,主要是真实登录地址不对!

2. cookie登录成功时会输出:

Name = wordpress_0efdf49af511fd88681529ef8c2e5fbf

Value = *****%***%*******************(value中会包含账户和密码)

并且jobbole_response.read()输出中存在“个人主页”“退出登录”字样,就说明登录成功了,否则只会有“登录”“注册”之类的字符串。

使用刚刚保存的cook_jar.txt文件登录参见[python爬虫 - Urllib库及cookie的使用 - 从文件中获取Cookie并访问]

皮皮Blog

实战3:使用cookie登录知乎

目前知乎采用动态验证码破解还没验证,这样post里面还需要captcha的参数。待定。。。

Note:这个_xsrf其实可以不submit,它已经作为cookie写进去了。可以看看登入www.zhihu.com的返回的header。

皮皮Blog

实战4:使用cookie登录本科网站爬取成绩信息

注意这个网站是https的网站,不过和上面的cookie登录的http网站一样登录。登录的是电子科大门户(因为小编就是UESTC的嘛)

获取本科网站登录地址

1. chrome浏览器中按F12审查元素 > Network > Headers > General > Request URL:https://uis.uestc.edu.cn/amserver/UI/Login

可以看到其真实网站登录网址为https://uis.uestc.edu.cn/amserver/UI/Login

2. 当然也可以用fiddler抓取https的请求,不过要配置一下:Tools > fiddler options > https > capture...和decrypt都打√ > 然后根据提示安装一证书yes就可以了

查看要传送的post数据

打开fiddler后,浏览器中登录门户网站,在fidddles中看到对应的webforms实际提交的数据,不过也只要IDToken1', 'IDToken2这两个数据。

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = 'pi'
__email__ = 'pipisorry@126.com'
"""
import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar

LOGIN_URL = r'https://uis.uestc.edu.cn/amserver/UI/Login'  # 登录教务系统的URL
get_url = 'http://eams.uestc.edu.cn/eams/teach/grade/course/person.action'  # 利用cookie请求访问另一个网址

values = {'IDToken1': '201106******', 'IDToken2': '***********'}
postdata = urllib.parse.urlencode(values).encode()
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

cookie_filename = 'cookie_jar.txt'
cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
    response = opener.open(request)
    # print(response.read().decode())
except urllib.error.URLError as e:
    print(e.code, ':', e.reason)

cookie_jar.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中
for item in cookie_jar:
    print('Name = ' + item.name)
    print('Value = ' + item.value)

get_request = urllib.request.Request(get_url, headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())

小编已gui,里面什么也没了,显示没有信息!楼主毕业了的T^T

[pyQuery语法來操作解析 HTML 文档解析教学网页]

[计算大学本学期绩点]

from:http://blog.csdn.net/pipisorry/article/details/47948065

ref:

python3爬虫 - cookie登录实战的更多相关文章

  1. python3爬虫开发与实战预览版

    https://germey.gitbooks.io/python3webspider/content/1.2.3-ChromeDriver%E7%9A%84%E5%AE%89%E8%A3%85.ht ...

  2. python3爬虫 - 利用浏览器cookie登录

    http://blog.csdn.net/pipisorry/article/details/47980653 爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证 ...

  3. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

  4. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  5. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-12基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  6. python爬虫-使用cookie登录

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  7. python3爬虫--反爬虫应对机制

    python3爬虫--反爬虫应对机制 内容来源于: Python3网络爬虫开发实战: 网络爬虫教程(python2): 前言: 反爬虫更多是一种攻防战,针对网站的反爬虫处理来采取对应的应对机制,一般需 ...

  8. selenium cookie 登录

    前言 爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的send key来输入账户密码就可以登录,但是有很多网站需要验证码之类的就不太好用了,这时候就体现到了co ...

  9. python3使用requests登录人人影视网站

    python3使用requests登录人人影视网站 继续练习使用requests登录网站,人人影视有一项功能是签到功能,需要每天登录签到才能升级. 下面的代码python代码实现了使用requests ...

随机推荐

  1. PHP MySQL 创建数据表

    PHP 创建 MySQL 表 一个数据表有一个唯一名称,并有行和列组成. 使用 MySQLi 和 PDO 创建 MySQL 表 CREATE TABLE 语句用于创建 MySQL 表. 我们将创建一个 ...

  2. JavaScript for 循环

    循环可以将代码块执行指定的次数. JavaScript 循环 如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. 我们可以这样输出数组的值: 一般写法: documen ...

  3. 网络七层OSI模型简介

    0.  网络七层OSI模型(Open System Interconnection)总览: 1.  应用层 2.  表示层 :表示层的作用是使通信的应用程序能够解释交换数据的含义.这些服务包括数据压缩 ...

  4. JavaSE基础问答

    1.JAVA的基本数据类型有哪些? JAVA的基本数据类型分为4类8种,就是整形 byte.short.int.long.浮点型 float 跟double,字符型 char,跟布尔型 true和 f ...

  5. 安卓高级3 RecyclerView 和cardView使用案例

    cardView: 添加依赖:在Studio搜索cardview即可 在V7包中 或者直接在gradle中添加 compile 'com.android.support:cardview-v7:24. ...

  6. JAVA面向对象-----局部内部类

    局部内部类 局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类. 访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员. 注意:局部内部类只能访问所在函数的fana ...

  7. The packages can be overrided by Java Endorsed Standards

     Endorsed Standards APIs The Endorsed Standards for Java SE constitute all classes and interfaces ...

  8. Unity UGUI图文混排(五) -- 一张图集对应多个Text

    继上一篇说的更新了一张图集对应多个Text的功能,为了节省资源嘛 这里,但是也没有舍弃之前的一个Text一个图集,因为我感觉应该两个都有用,于是我重新写了一个脚本 1.其实大体跟前面的都没变,解析标签 ...

  9. 利用CocoaHTTPServer实现wifi局域网传输文件到iphone

    背景 近日在做一个代码阅读器,其中涉及到代码文件的上传,之前看到过许多app支持局域网传文件,因此就通过查询和研究实现了此功能,我是用的框架是CocoaHTTPServer. 原理 CocoaHTTP ...

  10. 剑指Offer——银行网申内容模版

    剑指Offer--银行网申内容模版 年获得"优秀共青团员"称号 2013.12 科技标兵 2013.10 三好学生 2013.10 "三下乡"优秀学生 2013 ...