转载自:原文链接

前几篇文章介绍了urllib库基本使用和爬虫的简单应用,本文介绍如何通过post信息给网站,保存登陆后cookie,并用于请求有
权限的操作。保存cookie需要用到cookiejar类,可以输出cookie信息查看下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import http.cookiejar
import urllib.request #声明一个CookieJar对象实例来保存cookie
cookie = http.cookiejar.CookieJar()
#HTTPCookieProcessor对象来创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib.request.build_opner(handler)
#通过opner访问网址
response = opner.open('http://www.baidu.com')
#访问cookie中的数据
for item in cookie:
print('Name = '+ item.name)
print('Value = '+ item.value)

1 通过http.cookiejar.CookieJar()创建一个cookiejar对象,用来保存上网留下的cookie。
2 为了处理cookie,需要创建cookie处理器,通过urllib.request.HTTPCookieProcessor(cookie)根据cookie
创建cookie处理器。
3 接下来根据cookie处理器,建立opener, urllib.request.build_opener(handler)创建opener
4 通过openr访问cookie中的数据

可以保存cookie,用于以后访问有权限的网页。下面将cookie写入文件

1
2
3
4
5
6
7
8
9
10
11
12
#定义文件名
filename = 'cookie.txt'
#定义MozillaCookieJar对象保存cookie,并且cookie关联上filename文件
cookie = http.cookiejar.MozillaCookieJar(filename)
#创建cookie处理器
handler = request.HTTPCookieProcessor(cookie)
#通过handler构建opener
opener = request.build_opener(handler)
#利用opener请求网页
response = opener.open('http://www.baidu.com')
#保存cookie到文件
cookie.save(ignore_discard = True, ignore_expires = True)

1 传入文件名,调用http.cookiejar.MozillaCookieJar创建cookie,
cookie和文件名绑定了。
2 根据cookie创建处理器, request.HTTPCookieProcessor创建handler
3 根据Cookie处理器创建opener
4 用opener访问网站,生成cookie
5 cookie.save保存到filename文件中,ignore_discard表示忽略是否过期,
及时被丢弃也保存。ignore_expires表示文件存在则覆盖写入。

对于保存好的cookie文件,可以提取并访问其他网页。

1
2
3
4
5
6
7
8
9
10
11
12
filename = 'cookie.txt'
#创建MozillaCookieJar对象
cookie = http.cookiejar.MozillaCookieJar()
#从文件中读取cookie内容到变量
cookie.load(filename, ignore_discard = True, ignore_expires = True)
#生成cookie处理器
handler = request.HTTPCookieProcessor(cookie)
#创建opener
opener = request.build_opener(handler)
#用opener打开网页
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

1 用MozillaCookieJar创建cookie
2 调用cookie.load加载文件内容到cookie中
3 根据cookie创建HTTPCookieProcessor
4 根据handler创建opener
5 利用opener打开网页,返回response

下面综合应用上面的知识,用爬虫模拟登陆,然后获取有权限的网页和信息。
通过浏览器审查元素的方式可以查看访问网站的request和response,用fiddler更方便一些,用fidder监控浏览器
数据,然后模拟浏览器发送登录请求。
随便找一个需要登陆的网站
http://www.lesmao.cc/forum.php
找到登陆按钮,点击登陆,查看fiddler监控的数据。
可以在fiddler中看到这个request请求post数据给网站。

通过webform这一选项看到我们投递的消息

有些网页是需要登陆才能访问的,如
http://www.lesmao.cc/home.php?mod=space&do=notice&view=system

下面先模拟登陆,获取cookie,然后利用cookie访问个人信息网页。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
if __name__ == '__main__':
#登陆地址
login_url = 'http://www.lesmao.cc/member.php?mod=logging&action=login&referer='
#User-Agent信息
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
#Headers信息
head = {'User-Agnet': user_agent, 'Connection': 'keep-alive'} #登陆Form_Data信息
Login_Data = {}
Login_Data['formhash'] = '5ea0f6e4'
Login_Data['referer'] = 'http://www.lesmao.cc/./'
Login_Data['loginfield'] = 'username'
Login_Data['username'] = 'second'
Login_Data['password'] = '18301'
Login_Data['loginsubmit'] = 'true'
Login_Data['questionid'] = '0'
Login_Data['answer'] = '' #使用urlencode方法转换标准格式
logingpostdata = parse.urlencode(Login_Data).encode('utf-8')
#声明一个CookieJar对象实例来保存cookie
cookie = cookiejar.CookieJar()
#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
cookie_support = request.HTTPCookieProcessor(cookie)
#通过CookieHandler创建opener
opener = request.build_opener(cookie_support)
#创建Request对象
req1 = request.Request(url=login_url, data=logingpostdata, headers=head) #面向对象地址
date_url = 'http://www.lesmao.cc/home.php?mod=space&do=notice&view=system' req2 = request.Request(url=date_url, headers=head) try:
#使用自己创建的opener的open方法
response1 = opener.open(req1)
#print(response1.read().decode('utf-8'))
print('.................................')
response2 = opener.open(req2)
html = response2.read().decode('utf-8')
#打印查询结果
print(html) except error.URLError as e:
if hasattr(e, 'code'):
print("URLError:%d" % e.code)
if hasattr(e, 'reason'):
print("URLError:%s" % e.reason)
except error.HTTPError as e:
if hasattr(e, 'code'):
print("URLError:%d" % e.code)
if hasattr(e, 'reason'):
print("URLError:%s" % e.reason)
except Exception as e:
print('Exception is : ', e)

打印出的html信息和登陆后点击的信息是一致的,所以用cookie登陆并访问其它权限网页成功了。
源码下载地址:
源码下载
我的公众号:

python学习(十八)爬虫中加入cookie的更多相关文章

  1. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  2. 漫谈程序员(十八)windows中的命令subst

    漫谈程序员(十八)windows中的命令subst 用法格式 一.subst [盘符] [路径]  将指定的路径替代盘符,该路径将作为驱动器使用 二.subst /d 解除替代 三.不加任何参数键入  ...

  3. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  4. (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)

    python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSgl7bz python100经典练习题python ...

  5. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  6. Python学习教程:Pandas中第二好用的函数

    从网上看到一篇好的文章是关于如何学习python数据分析的迫不及待想要分享给大家,大家也可以点链接看原博客.希望对大家的学习有帮助. 本次的Python学习教程是关于Python数据分析实战基础相关内 ...

  7. [持续更新] Python学习、使用过程中遇见的非代码层面知识(想不到更好的标题了 T_T)

    写在前面: 这篇博文记录的不是python代码.数据结构.算法相关的内容,而是在学习.使用过程中遇见的一些没有技术含量,但有时很令人抓耳挠腮的小东西.比如:python内置库怎么看.python搜索模 ...

  8. python学习笔记八——字典的方法

    4.3.3 字典的方法 字典的常用方法可以极大地提高编程效率.keys()和values()分别返回字典的key列表和value列表.例: dict={"a":"appl ...

  9. Python脚本控制的WebDriver 常用操作 <二十八> 超时设置和cookie操作

    超时设置 测试用例场景 webdriver中可以设置很多的超时时间 implicit_wait.识别对象时的超时时间.过了这个时间如果对象还没找到的话就会抛出异常 Python脚本 ff = webd ...

随机推荐

  1. 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置

    入手树莓派将近一个月了,很折腾,许多资源不好找,也很乱.简单整理一下自己用到的东西,方便以后自己或别人继续折腾. 0. 操作系统下载 树莓派官方 Raspbian 系统下载:http://www.ra ...

  2. 奔跑吧DKY——团队Scrum冲刺阶段-Day 4

    今日完成任务 谭鑫:主要解决之前存在的控件不灵敏问题,导致界面跳转不顺利. 黄宇塘:制作新的游戏背景图,对主界面图进行调整. 赵晓海:主要解决之前存在的控件不灵敏问题,导致界面跳转不顺利. 方艺雯:制 ...

  3. 20172308 实验二《Java面向对象程序设计 》实验报告

    20172308 2017-2018-2 <程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王 ...

  4. HDU 4514 湫湫系列故事——设计风景线 树的直径

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4514 湫湫系列故事--设计风景线 Time Limit: 5000/2000 MS (Java/Ot ...

  5. MapReduce编程之Map Join多种应用场景与使用

    Map Join 实现方式一:分布式缓存 ● 使用场景:一张表十分小.一张表很大. ● 用法: 在提交作业的时候先将小表文件放到该作业的DistributedCache中,然后从DistributeC ...

  6. cobbler技术详解(是PXE二次详解)

    Cobbler是PXE的二次封装,使用Python语言开发, 可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学 ...

  7. Scrum 6.0

    sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉很好. 其他人可以了解你的团队在做些什么,并得到重要反馈. 演示是一种社会活动,不同的团队可以在这里相互交流,讨论 ...

  8. D3.js 入门学习(二) V4的改动

    //d3.scan /* 新的d3.scan方法对数组进行线性扫描,并根据指定的比较函数返回至少一个元素的索引. 这个方法有点类似于d3.min和d3.max. 而d3.scan可以得到极值的索引而不 ...

  9. error_reporting 报错

    <?php // 关闭所有PHP错误报告 error_reporting(0); // 报告简单的运行错误 error_reporting(E_ERROR | E_WARNING | E_PAR ...

  10. MYSQL 碎片查询

    查询库中碎片大于1G的所有表 数据总大小:DATA_LENGTH+INDEX_LENGTH实际表空间大小: TABLE_ROWS*AVG_ROW_LENGTH碎片大小:(DATA_LENGTH+IND ...