# -*- 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. Win7 启动修复

    先让我们看一下windows7的启动过程的常识:电脑加电后,首先是启动BIOS程序,BIOS自检完毕后,找到硬盘上的主引导记录MBR,MBR读取DPT(分区表),从中找出活动的主分区,然后读取活动主分 ...

  2. linux 下程序员专用搜索源码用来替代grep的软件ack(后来发现一个更快的: ag), 且有vim插件的

    发现一个比ack更快更好用的:  https://github.com/ggreer/the_silver_searcher   , 使用时命令为ag,它是基于ack的代码二次开发的,所有使用方法基本 ...

  3. java中集合的组成及特点

    1:集合 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程 ...

  4. dubbo 一个接口多个实现

    <dubbo:service ref="dubboGroupService1" interface="com.yncp.dubbo.service.IDubboGr ...

  5. java多线程与线程间通信

    转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...

  6. Expm 9_1 有向图中环的判断问题

    [问题描述] 给定一个有向图,要求使用深度优先搜索策略,判断图中是否存在环. package org.xiu68.exp.exp9; public class Exp9_1 { //用深度优先搜索判断 ...

  7. php面向对象编程self和static的区别

    在php的面向对象编程中,总会遇到 class test{ public static function test(){ self::func(); static::func(); } public ...

  8. python+selenium二:定位方式

    # 八种单数定位方式:elementfrom selenium import webdriverimport time driver = webdriver.Firefox()time.sleep(2 ...

  9. 步步为营-62-Excel的导入和导出

    说明:NPOI组件的使用 1 添加引用 2 代码 using System; using System.Collections.Generic; using System.ComponentModel ...

  10. ASP.NET Core 2 学习笔记(九)模型绑定

    ASP.NET Core MVC的Model Binding会将HTTP Request数据,以映射的方式对应到参数中.基本上跟ASP.NET MVC差不多,但能Binding的来源更多了一些.本篇将 ...