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. 在window下搭建Vue.Js开发环境

    nodejs官网http://nodejs.cn/下载安装包,无特殊要求可本地傻瓜式安装,这里选择2017-5-2发布的 v6.10.3,也可选择阿里云镜像https://npm.taobao.org ...

  2. SSM框架-SpringMVC 实例文件上传下载

    一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...

  3. 笔记 : windows系统下 命令行 php --version 的版本与phpinfo()版本不一致问题

    第一 : php --version命令cmd不随wamp中php版本改变而改变的, php命令是随着wamp安装时将:wamp/bin/php/php5.6.25[版本]自动或手动添加到环境变量, ...

  4. Css预处理器---Less(二)

    三.Less语法 (1)变量 //less代码 @nice-blue : #5B83AD; @light-blue : @nice-blue + #111; #header { color : @li ...

  5. PB窗体之间进行传递参数

    例:A窗口传递给B窗口y A窗口: 定义参数名称并赋值String s_parm  s_parm=username+'%'+password,然后openwithparm(w_main,s_parm) ...

  6. sv命令空间 packge

    SV中的module,interface,program,checker,都提供declaration空间,内部定义都local当前的那个scope,相互之间的building block不影响,不识 ...

  7. Linq To SQL LEFT OUTER JOIN (Left Join)

    SQL: SELECT [t0].[ProductName], [t1].[TotalPrice] AS [TotalPrice] FROM [Product] AS [t0] LEFT OUTER ...

  8. 安装模块时报错“error: Microsoft Visual C++ 14.0 is required…”

    安装pymssql时报错:在安装的过程中遇到了“error: Microsoft Visual C++ 14.0 is required…” 解决办法: 进入https://www.lfd.uci.e ...

  9. Java基础(basis)-----代码块详解

    1.静态代码块 格式: static{ 内容..... } 随着类的加载而加载,而且只被加载一次 多个静态代码块之间按照顺序结构执行 优先其他各种代码块以及构造函数先执行 静态的代码块中只能执行静态的 ...

  10. 20155228 实验三 敏捷开发与XP实践

    20155228 实验三 敏捷开发与XP实践 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)>& ...