Python3网络爬虫(三):Python3使用Cookie-模拟登陆获取妹子联系方式

本文主要是介绍Python3网络爬虫(三):Python3使用Cookie-模拟登陆获取妹子联系方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请注明作者和出处:http://blog.csdn.net/c406495762

运行平台:Windows

Python版本:Python3.x

IDE:Sublime text3

一、为什么要使用Cookie

    Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 
    比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。 
    使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。

    http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

    它们的关系: CookieJar–派生–>FileCookieJar–派生–>MozillaCookieJar和LWPCookieJar

    工作原理:创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。查看登录之后才能看到的信息。

    同样,我们以实例进行讲解,爬取伯乐在线的面向对象的漂亮MM的邮箱联系方式。

二、实战

1.背景介绍

    在伯乐在线有这么一个有趣的模块,面向对象,它说白了就是提供了一个程序员(媛)网上相亲的平台。

    URL:http://date.jobbole.com/

    它的样子是这样的:

    可以看到,这里有很多的相亲贴,随便点进去就会有网上相亲MM的详细信息,想获取MM的联系方式,需要积分,积分可以通过签到的方式获取。如果没有登陆账户,获取联系方式的地方是这个样子的:

    如果登陆了账号,获取联系方式的地方是这个样子的:

    想要爬取MM的联系邮箱,就需要用到我们本次讲到的知识,Cookie的使用。当然,首先你积分也得够。

    在讲解之前,推荐一款抓包工具–Fiddler,可以在Google Chrome的Google商店下载这个插件,它的样子是这样的:

    可以看到,通过这个插件,我们可以很容易找到Post的Form Data等信息,很方便,当然也可以用之前讲得浏览器审查元素的方式查看这些信息。

2.过程分析

    在伯乐在线首页点击登陆的按钮,Fiddler的抓包内容如下:

    从上图可以看出,真正请求的url是

http://www.jobbole.com/wp-admin/admin-ajax.php

    Form Data的内容记住,这些是我们编程需要用到的。user_login是用户名,user_pass是用户密码。

    在点击取得联系邮箱按钮的时候,Fiddler的抓包内容如下:

    从上图可以看出,此刻真正请求的url是

http://date.jobbole.com/wp-admin/admin-ajax.php

    同样Form Data中内容要记下来。postId是每个帖子的id。例如,打开一个相亲贴,它的URL是http://date.jobbole.com/4128/,那么它的这个postId就是4128。为了简化程序,这里就不讲解如何自动获取这个postId了,本实例直接指定postId。如果想要自动获取,可以使用beautifulsoup解析http://date.jobbole.com/返回的信息。beautifulsoup的使用。有机会的话,会在后面的爬虫笔记中进行讲解。

3.测试

    1)将Cookie保存到变量中

    首先,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中,先来感受一下:

# -*- coding: UTF-8 -*-
from urllib import request
from http import cookiejarif __name__ == '__main__':#声明一个CookieJar对象实例来保存cookiecookie = cookiejar.CookieJar()#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandlerhandler=request.HTTPCookieProcessor(cookie)#通过CookieHandler创建openeropener = request.build_opener(handler)#此处的open方法打开网页response = opener.open('http://www.baidu.com')#打印cookie信息for item in cookie:print('Name = %s' % item.name)print('Value = %s' % item.value)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

    我们使用以上方法将cookie保存到变量中,然后打印出了cookie中的值,运行结果如下:

    2)保存Cookie到文件

    在上面的方法中,我们将cookie保存到了cookie这个变量中,如果我们想将cookie保存到文件中该怎么做呢?方便以后直接读取文件使用,这时,我们就要用到FileCookieJar这个对象了,在这里我们使用它的子类MozillaCookieJar来实现Cookie的保存,编写代码如下:

# -*- coding: UTF-8 -*-
from urllib import request
from http import cookiejarif __name__ == '__main__':#设置保存cookie的文件,同级目录下的cookie.txtfilename = 'cookie.txt'#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件cookie = cookiejar.MozillaCookieJar(filename)#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandlerhandler=request.HTTPCookieProcessor(cookie)#通过CookieHandler创建openeropener = request.build_opener(handler)#此处的open方法打开网页response = opener.open('http://www.baidu.com')#保存cookie到文件cookie.save(ignore_discard=True, ignore_expires=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

    cookie.save的参数说明:

  • ignore_discard的意思是即使cookies将被丢弃也将它保存下来;

  • ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入。

    在这里,我们将这两个全部设置为True。

    运行之后,cookies将被保存到cookie.txt文件中。我们可以查看自己查看下cookie.txt这个文件的内容。

    3)从文件中获取Cookie并访问

    我们已经做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法来读取cookie并访问网站,感受一下:

# -*- coding: UTF-8 -*-
from urllib import request
from http import cookiejarif __name__ == '__main__':#设置保存cookie的文件的文件名,相对路径,也就是同级目录下filename = 'cookie.txt'#创建MozillaCookieJar实例对象cookie = cookiejar.MozillaCookieJar()#从文件中读取cookie内容到变量cookie.load(filename, ignore_discard=True, ignore_expires=True)#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandlerhandler=request.HTTPCookieProcessor(cookie)#通过CookieHandler创建openeropener = request.build_opener(handler)#此用opener的open方法打开网页response = opener.open('http://www.baidu.com')#打印信息print(response.read().decode('utf-8'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

    了解到以上内容,我们那就可以开始正式编写模拟登陆伯乐在线的程序了。同时,我们也可以获取相亲MM的联系方式。

4.编写代码

    我们利用CookieJar对象实现获取cookie的功能,存储到变量中。然后使用这个cookie变量创建opener,使用这个设置好cookie的opener即可模拟登陆,同笔记四中讲到的IP代理的使用方法类似。

    创建cookie_test.py文件,编写代码如下:

# -*- coding: UTF-8 -*-
from urllib import request
from urllib import error
from urllib import parse
from http import cookiejarif __name__ == '__main__':#登陆地址login_url = 'http://www.jobbole.com/wp-admin/admin-ajax.php'    #User-Agent信息                   user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'#Headers信息head = {'User-Agnet': user_agent, 'Connection': 'keep-alive'}#登陆Form_Data信息Login_Data = {}Login_Data['action'] = 'user_login'Login_Data['redirect_url'] = 'http://www.jobbole.com/'Login_Data['remember_me'] = '0'         #是否一个月内自动登陆Login_Data['user_login'] = '********'       #改成你自己的用户名Login_Data['user_pass'] = '********'        #改成你自己的密码#使用urlencode方法转换标准格式logingpostdata = parse.urlencode(Login_Data).encode('utf-8')#声明一个CookieJar对象实例来保存cookiecookie = cookiejar.CookieJar()#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandlercookie_support = request.HTTPCookieProcessor(cookie)#通过CookieHandler创建openeropener = request.build_opener(cookie_support)#创建Request对象req1 = request.Request(url=login_url, data=logingpostdata, headers=head)#面向对象地址date_url = 'http://date.jobbole.com/wp-admin/admin-ajax.php'#面向对象Date_Data = {}Date_Data['action'] = 'get_date_contact'Date_Data['postId'] = '4128'#使用urlencode方法转换标准格式datepostdata = parse.urlencode(Date_Data).encode('utf-8')req2 = request.Request(url=date_url, data=datepostdata, headers=head)try:#使用自己创建的opener的open方法response1 = opener.open(req1)response2 = opener.open(req2)html = response2.read().decode('utf-8')index = html.find('jb_contact_email')#打印查询结果print('联系邮箱:%s' % html[index+19:-2])except error.URLError as e:if hasattr(e, 'code'):print("HTTPError:%d" % e.code)elif hasattr(e, 'reason'):print("URLError:%s" % e.reason)
  • 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
  • 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

5.运行结果如下:

三、总结

    获取成功!如果看过之前的笔记内容,我想这些代码应该很好理解吧。

    PS:伯乐在线的面向对象模块就是单身狗的福音!还在犹豫什么?赶快拿起键盘,coding吧!同时,如果您觉得本篇文章对您的学习有所帮助,欢迎关注、评论、顶!

这篇关于Python3网络爬虫(三):Python3使用Cookie-模拟登陆获取妹子联系方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963430

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]