# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2018/9/15 0015 4:52 #cookie 是服务器发给浏览器的特殊信息
# 可以理解为一个临时通行证
# 以 json 形式存放
# name: cookie 的名称
# value: coikie 的值
# domain: 可以使用此 cookie 的域名
# path: 可以使用此 cookie 的页面路径
# expires/Max-Age : cookie 的超时时间 默认是 session ,当浏览器关闭时失效
# secure : 设置是否只能通过 https 来传递此条 cookie # 豆瓣登录
# 抓包 按F12,在输入账号,密码框中输入相应值后,点登录,
# 找到 302 页面跳转,这时所需要的数据就在这里 login import requests
from urllib import request
from lxml import etree
from PIL import Image class DoubanSpider():
def __init__(self,us,ps):
self.session = requests.session()
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'}
self.login_url = 'https://accounts.douban.com/login'
self.us = us
self.ps = ps def start_res(self):
# 第一步先不登录,先 get 看看有没有验证码出现,
re = self.session.get(self.login_url).content.decode()
ht = etree.HTML(re)
self.pass_login(ht) def pass_login(self,ht):
captcha_id = ht.xpath('//input[@name="captcha-id"]/@value')
# print(captcha_id)
# 验证码下载地址
captcha_solution = ht.xpath('//img[@id="captcha_image"]/@src')
# print(captcha_solution)
# 如果没有验证码
if captcha_solution == []:
print('没有发现验证码')
data = {
'source': 'movie',
'redir': 'https://movie.douban.com/top250',
'form_email': self.us,
'form_password':self.ps,
'login': '登录'
}
else:
im_path = '1.png' # 验证码存放路径
# 文件下载方法, 下载地址, 路径文件名
request.urlretrieve(captcha_solution[0], im_path)
img = Image.open(im_path).show()
data = {
'source': 'movie',
'redir': 'https://movie.douban.com/top250',
'form_email': self.us,
'form_password':self.ps,
'captcha-solution': input('请输入验证码--->>'), # 验证码
'captcha-id': captcha_id[0],
'login': '登录'
}
res = self.session.post(self.login_url, data=data, headers = self.headers).content.decode()
self.login_res(res) # 登录成功后获取页面内容
def login_res(self,res):
html = etree.HTML(res)
# 如果登录成功,r 列表中有值,否则为空列表
r = html.xpath( '//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()' )
if r ==[]:
print('登录失败')
else:print('登录成功,当前账号为:%s' %r[0]) if __name__ == '__main__':
lo = DoubanSpider('账号', '密码')
lo.start_res()

  

  data = {
'source': 'movie',
'redir': 'https://movie.douban.com/top250',
'form_email': self.us,
'form_password':self.ps,
'captcha-solution': input('请输入验证码--->>'), # 验证码
'captcha-id': captcha_id[0],
'login': '登录'
}

当要输入验证码时,要提交的值为data2,

其中  captcha - solution  的值为验证码

captcha - id 在页面源码中 ctrl  + f  搜索

用 xpath  找到节点,可取其值

潭州课堂25班:Ph201805201 爬虫基础 第十三课 cookie (课堂笔记)的更多相关文章

  1. 潭州课堂25班:Ph201805201 爬虫基础 第八课 selenium (课堂笔记)

    Selenium笔记(1)安装和简单使用 简介 Selenium是一个用于Web应用程序测试的工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, ...

  2. 潭州课堂25班:Ph201805201 爬虫基础 第三课 urllib (课堂笔记)

    Python网络请求urllib和urllib3详解   urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了url ...

  3. 潭州课堂25班:Ph201805201 爬虫基础 第六课 选择器 (课堂笔记)

    HTML解析库BeautifulSoup4 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来说更加的简单方便,常常能够节省我们大量的时间 ...

  4. 潭州课堂25班:Ph201805201 爬虫基础 第四课 Requests (课堂笔记)

    优雅到骨子里的Requests   1528811134432   简介   上一篇文章介绍了Python的网络请求库urllib和urllib3的使用方法,那么,作为同样是网络请求库的Request ...

  5. 潭州课堂25班:Ph201805201 爬虫基础 第十一课 点触验证码 (课堂笔记)

    打开 网易盾 http://dun.163.com/trial/picture-click  ——在线体验——图中点选 打码平台 ——超级鹰    http://www.chaojiying.com/ ...

  6. 潭州课堂25班:Ph201805201 爬虫基础 第十课 图像处理- 极验验证码 (课堂笔记)

    用 python 的  selenium  访问  https://www.huxiu.com/ 自动通过验证码 # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 20 ...

  7. 潭州课堂25班:Ph201805201 爬虫基础 第七课 Python与常见加密方式 (课堂笔记)

    打开图形界面  18版 Python与常见加密方式 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时 ...

  8. 潭州课堂25班:Ph201805201 爬虫基础 第五课 (案例) 豆瓣分析 (课堂笔记)

    动态讲求 , 翻页参数: # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/9/1 0001 3:44 import requests,json class ...

  9. 潭州课堂25班:Ph201805201 爬虫高级 第十三 课 代理池爬虫检测部分 (课堂笔记)

    1,通过爬虫获取代理 ip ,要从多个网站获取,每个网站的前几页2,获取到代理后,开进程,一个继续解析,一个检测代理是否有用 ,引入队列数据共享3,Queue 中存放的是所有的代理,我们要分离出可用的 ...

随机推荐

  1. RNN(1) ------ “理解LSTM”(转载)

    原文链接:http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这 ...

  2. llinux除了软连接本地文件夹同步:mount

    mount --bind /srv/dir1   /srv/dir2dir1:被共享的文件夹dir2:需要同步的文件夹

  3. 最大流算法-最高标号预流推进(HLPP)

    昨天我们学习了ISAP算法,它属于增广路算法的大类.今天学习的算法是预流推进算法中很高效的一类--最高标号预流推进(HLPP). 预流推进 预流推进是一种很直观的网络流算法.如果给到一个网络流让你手算 ...

  4. (并发编程)全局解释器锁(GIL)-----有了GIL不用给线程加锁了?

    一.全局解释器锁 (GIL)运行test.py的流程:a.将python解释器的代码从硬盘读入内存b.将test.py的代码从硬盘读入内存  (一个进程内装有两份代码---一份cpython解释器代码 ...

  5. Windows2008 r2 x64下安装FTP工具File Zilla server报错:could not load tls libraries filezilla

    安装file zilla server的时候报错: could not load tls libraries filezilla 搜索了下发现是新版本有这个问题,降低到0.9.43就没这个问题了

  6. svn使用openldap验证apache访问方式

    启用svn服务器的sasl验证机制 1.安装cyrus-sasl认证包 # yum install -y *sasl* # rpm -qa|grep sasl cyrus-sasl-2.1.23-15 ...

  7. linux POSIX 信号量介绍

    信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)使用.多线程可以同时运行多个线程函数完成功能,但是对于共享数据如果不加以锁定,随意改变共享数据的值会发生 ...

  8. jQuery Ajax实例各种使用方法详解

    在jquery中ajax实现方法分类很多种,如有:load.jQuery.get.jQuery.post.jQuery.getScript.jQuery Ajax 事件.jQuery.ajaxSetu ...

  9. jquery----扩展事件

    常用事件 blur([[data],fn]) 失去焦点 focus([[data],fn]) 获取焦点( 搜索框例子) change([[data],fn]) 当select下拉框中的元素发生改变的时 ...

  10. Javascript中的反射机制(五)

    一: 什么是反射机制 反射机制指的是程序在运行时能够获取自身的信息.例如一个对象能够在运行时知道自己有哪些方法和属性. 二: 在JavaScript中利用for(…in…)语句实现反射 在JavaSc ...