1、模拟豆瓣登录

'''
|-- 代码解析:
|-- 1、登录必须具备的条件:url,cookie,fromData
fromData的参数如下:
source: index_nav
form_email: 1832785141@qq.com
form_password: wfq8319274129
captcha-solution: rough
captcha-id: K0dnHwvyM2evqk1Do8beSlpl:en
login:登录
拿到这些参数必须弄懂具体各个参数是什么含义:
form_email : 用户名
form_password : 密码
captcha-solution : 验证码图片的名字(如何确认:登录页面查看网页源代码搜索:captcha-solution;另外一种方法:登录页检查,用左上角箭头查看验证码框。得到以下的内容:)
<input type="text" autocomplete="off" class="inp" id="captcha_field" name="captcha-solution" tabindex="3" placeholder="验证码"/>
captcha-id : 验证码图片ID(如何确认:同captcha-solution方法一样)
|-- 2、由于存在验证码,所以data字典内分两部分写入,一部分写入验证码之前的字段:source,form_email,form_password。一部分等获取验证码后,在写入:
captcha-solution,captcha-id,login
|-- 3、用reponse接受请求
|-- 4、读取返回来的数据
|-- 5、获取验证码的地址(方法:登录页检查,用左上角的箭头点击验证码图片就可以得到地址,具体如下:)
<img id="captcha_image" src="https://www.douban.com/misc/captcha?id=XnfFdo9PtGEvzszCDcsba03p:en&amp;size=s" alt="captcha" class="captcha_image" title="看不清楚?点图片可以换一个" style="cursor: pointer;">
具体代码用:re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
-- 这里需要注意的知识点:imgurl=re.search(), src="(.+?)"正则表达式
|-- 6、获取验证码的图片url:url = imgurl.group(1) 并把图片保存到目录下以便程序运行时输入具体的验证码:res = urllib.request.urlretrieve(url,'v.jpg')
|-- 7、获取验证码的ID(方法同第5步一样,具体如下:)
<input type="hidden" name="captcha-id" value="F3RK1x6AUPruX28jxjfSGfoI:en">
具体代码用: re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>',html)
--同样需要注意的知识点:re.search,value="(.+?) 正则表达式
|-- 8、再次写入captcha-solution,captcha-id,login
|-- 9、再次用reponse读取返回的数据
|-- 10、做个检查点,判断返回的url是否是登录后的url
''' import re
import urllib.request
import urllib.parse
from http.cookiejar import CookieJar
import ssl
ssl._create_default_https_context = ssl._create_unverified_context #登录需要的参数
login_url = "https://www.douban.com/accounts/login"
cookie = CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor) data = {"form_email":"1832785141@qq.com",
"form_password":"wfq8319274129",
"source":"index_nav"} #request = urllib.request.Request(login_url,urllib.parse.urlencode(data).encode('utf-8'),method='POST')
reponse = opener.open(login_url,urllib.parse.urlencode(data).encode('UTF-8')) #验证成功跳转至登录页
if reponse.geturl() == login_url:
html = reponse.read().decode() #获取验证码图片地址
imgurl = re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
print("imgurl++",imgurl) if imgurl:
#group()返回组号匹配的所有字符串即:验证码图片的url
url = imgurl.group(1)
print("url--",url)
#将验证码图片保存至同目录下
res = urllib.request.urlretrieve(url,'v.jpg') #获取图片id:captcha-id
captcha = re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>',html)
#print("captcha==",captcha) if captcha:
vcode = input('请输入验证码:')
data["captcha-solution"]=vcode
data["captcha-id"] = captcha.group(1)
data["login"] = "登录" #提交验证码
reponse =opener.open(login_url,urllib.parse.urlencode(data).encode('UTF-8')) #登录成功,跳转至首页
if reponse.geturl() == "https://www.douban.com/":
print("登录成功")

涉及到的知识点

1、https://www.cnblogs.com/tina-python/p/5508402.html

2、http://www.cnblogs.com/anni-qianqian/p/10019672.html   (各类爬虫的实例!!!)

3、URLError错误解决方案:https://blog.csdn.net/sylmoon/article/details/78777770

【Python54.1--豆瓣登录】的更多相关文章

  1. python 模拟豆瓣登录(豆瓣6.0)

    最近在学习python爬虫,看到网上有很多关于模拟豆瓣登录的例子,随意找了一个试了下,发现不能运行,对比了一下代码和豆瓣网站,发现原来是豆瓣网站做了修改,增加了反爬措施. 首先看下要模拟登录的网站: ...

  2. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  3. Python爬虫(3)豆瓣登录

    前面(1)(2)的内容已经足够爬虫如链家网之类的不需要登录可以直接获取数据的网站. 而要爬取社交网站比较鲜明的特点就是需要登录,否则很多东西都无法获取.经过测试发现,微博,知乎都不是很好登录,知乎有时 ...

  4. OAuth2.0_豆瓣登录_API错误返回码说明一览表[转]

    转自: http://blog.unvs.cn/archives/douban-oauth-2.0-error_code.html 在遵循OAuth2.0协议,开始制作豆瓣过程中,经常会遇到以下两个错 ...

  5. 十四 web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    打码接口文件 # -*- coding: cp936 -*- import sys import os from ctypes import * # 下载接口放目录 http://www.yundam ...

  6. Python爬虫——爬豆瓣登录页面

    直接上代码 import urllib.request import http.cookiejar from lxml import etree # from spiderImg import get ...

  7. scrapy Formrequest用法(豆瓣登录案例)

    # -*- coding: utf-8 -*-import scrapyfrom scrapy.http import Request,FormRequest class DbSpider(scrap ...

  8. 进阶——scrapy登录豆瓣解决cookie传递问题并爬取用户参加过的同城活动©seven_clear

    最近在用scrapy重写以前的爬虫,由于豆瓣的某些信息要登录后才有权限查看,故要实现登录功能.豆瓣登录偶尔需要输入验证码,这个在以前写的爬虫里解决了验证码的问题,所以只要搞清楚scrapy怎么提交表单 ...

  9. python爬虫+使用cookie登录豆瓣

    2017-10-09 19:06:22 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 先获得cookie,然后自动登录豆瓣和新浪微博 系统环境: 64位win10系统,同时装pytho ...

随机推荐

  1. 一步一步学Python(3) 基础补充

    最近在系统学习Python,以MOOC上面的一套Python3的课程为基础.本文主要总结一下基础部分的关键点. 1.python基本数据类型 2.python运算符 3.构建简洁高效的IDE环境 4. ...

  2. 219. 存在重复元素 II

    给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示例 1: 输入: nums = ...

  3. DBA角色职责

    MySQL DBA分架构DBA,运维DBA和开发DBA三种角色,职责介绍如下: MySQL数据库系统日常管理职责 日常管理的主要职责是对MySQL服务器程序mysqld的运行情况进行管理,使数据库用户 ...

  4. 三 js语句

    /** * Created by Administrator on 2017/12/24. * 1.顺序语句 * 2.选择语句 if else swtich case * 3.循环语句 for whi ...

  5. Explorer Bo (思维 + 树链剖分)

    题意:求用最少的链覆盖所有的边用最少的总链长度. 思路:为了使得使用的链最少,我们可以知道使用的数量应该是(子叶 + 1)/ 2. 画图可知:当节点下的边数是偶数时,为了将该父节点上的边给连接上,所以 ...

  6. 检测FTP服务并开启FTP服务

    1. 检测FTP服务是否开启 1.1. 通过查询提供FTP服务的进程是否存在,并未找到任何包含ftp关键字的进程信息,可判断服务未开启. root@lb- ~ # ps -ef | grep ftp ...

  7. 设计模式之Proxy(代理)(转)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  8. 【JavaScript 6连载】三、构造函数

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. SQL Server 2012中的AlwaysOn尝试

      简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移 ...

  10. The Little Prince-12/09

    The Little Prince-12/09 今天中文书评+自述奥! 也许世界上也有五千朵和你一模一样的花,但只有你是我独一无二的玫瑰. ————喵喵喵,多么美妙的一句表白词呀! 时间会缓和所有的悲 ...