python3爬虫 - cookie登录实战
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发生了变化,加上了用户名***和密码*************
#!/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:
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。
实战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登录实战的更多相关文章
- python3爬虫开发与实战预览版
https://germey.gitbooks.io/python3webspider/content/1.2.3-ChromeDriver%E7%9A%84%E5%AE%89%E8%A3%85.ht ...
- python3爬虫 - 利用浏览器cookie登录
http://blog.csdn.net/pipisorry/article/details/47980653 爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证 ...
- Python3爬虫系列:理论+实验+爬取妹子图实战
Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...
- Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-12基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
- python爬虫-使用cookie登录
前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...
- python3爬虫--反爬虫应对机制
python3爬虫--反爬虫应对机制 内容来源于: Python3网络爬虫开发实战: 网络爬虫教程(python2): 前言: 反爬虫更多是一种攻防战,针对网站的反爬虫处理来采取对应的应对机制,一般需 ...
- selenium cookie 登录
前言 爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的send key来输入账户密码就可以登录,但是有很多网站需要验证码之类的就不太好用了,这时候就体现到了co ...
- python3使用requests登录人人影视网站
python3使用requests登录人人影视网站 继续练习使用requests登录网站,人人影视有一项功能是签到功能,需要每天登录签到才能升级. 下面的代码python代码实现了使用requests ...
随机推荐
- python笔记五(条件判断/循环/break和continue)
一 条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> ...
- 这是一个测试,测试markdown语法
[TOC] 1. chpt1 这是一段话,前面没有空格 前面有4个空格,且在编辑状态下上面没有空行 前面有4个空格,且在编辑状态下上面有一个空行. 前面按了一下tab 1.1 1.1 2 段落1 前面 ...
- 解放双手——Android的自动化构建及发布
在一个App从开发到测试的过程中,我有很长一段时间都是这样做的:打包,上传到tower,在tower上编写本次更新说明,通知测试.一般情况下,打包及上传的过程大概也就2分钟.除此之外,由于项目代码有作 ...
- React Native 项目实战-Tamic
layout: post title: React Native 项目实战 date: 2016-10-18 15:02:29 +0800 comments: true categories: Rea ...
- 永远不要在循环之外调用wait方法
1. 前言 随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导.对于现在的java程序员们来说,并发编程越来越重要和习以为常.很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入 ...
- Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...
- java集合循环删除
java集合循环删除,java list集合操作,java循环.分享牛,分享牛原创.java集合删除方法. 2.6.1.第一种方式 list.add("1"); list.add( ...
- Support Annotation Library使用详解
概述 Support Annotation Library是在Android Support Library19.1版本开始引入的一个全新的函数包,它包含了诸多有用的元注解.用来帮助开发者在编译期间发 ...
- [openresty]安装nginx_lua
这种方式是直接安装openresty ,不是通过重新编译nginx Ubuntu 安装 安装依赖包 $ sudo apt-get install libreadline-dev libncurses5 ...
- ListView之侧滑删除
SwipeMenuListView 是一个为listview添加item侧滑菜单的开源库,项目地址:https://github.com/baoyongzhang/SwipeMenuListView ...