这篇文章主要介绍了python爬虫豆瓣网的模拟登录实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
思路

一、想要实现登录豆瓣关键点
分析真实post地址 ----寻找它的formdata,如下图,按浏览器的F12可以找到
实战操作
实现:模拟登录豆瓣,验证码处理,登录到个人主页就算是success
数据:没有抓取数据,此实战主要是模拟登录和处理验证码的学习。要是有需求要抓取数据,编写相关的抓取规则即可抓取内容。
登录成功展示如图:
spiders文件夹中DouBan.py主要代码如下:

# -*- coding: utf-8 -*-
import scrapy,urllib,re
from scrapy.http import Request,FormRequest
import ruokuai
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class DoubanSpider(scrapy.Spider):name = "DouBan"allowed_domains = ["douban.com"]#start_urls = ['http://douban.com/']header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"} #供登录模拟使用def start_requests(self):url='https://www.douban.com/accounts/login'return [Request(url=url,meta={"cookiejar":1},callback=self.parse)]#可以传递一个标示符来使用多个。如meta={'cookiejar': 1}这句,后面那个1就是标示符def parse(self, response):captcha=response.xpath('//*[@id="captcha_image"]/@src').extract() #获取验证码图片的链接print captchaif len(captcha)>0:'''此时有验证码'''#人工输入验证码#urllib.urlretrieve(captcha[0],filename="C:/Users/pujinxiao/Desktop/learn/douban20170405/douban/douban/spiders/captcha.png")#captcha_value=raw_input('查看captcha.png,有验证码请输入:')#用快若打码平台处理验证码--------验证码是任意长度字母,成功率较低captcha_value=ruokuai.get_captcha(captcha[0])reg=r'<Result>(.*?)</Result>'reg=re.compile(reg)captcha_value=re.findall(reg,captcha_value)[0]print '验证码为:',captcha_valuedata={"form_email": "weisuen007@163.com","form_password": "weijc7789","captcha-solution": captcha_value,#"redir": "https://www.douban.com/people/151968962/",  #设置需要转向的网址,由于我们需要爬取个人中心页,所以转向个人中心页}else:'''此时没有验证码'''print '无验证码'data={"form_email": "weisuen007@163.com","form_password": "weijc7789",#"redir": "https://www.douban.com/people/151968962/",}print '正在登陆中......'####FormRequest.from_response()进行登陆return [FormRequest.from_response(response,meta={"cookiejar":response.meta["cookiejar"]},headers=self.header,formdata=data,callback=self.get_content,)]def get_content(self,response):title=response.xpath('//title/text()').extract()[0]if u'登录豆瓣' in title:print '登录失败,请重试!'else:print '登录成功''''可以继续后续的爬取工作'''

ruokaui.py代码如下:
我所用的是若块打码平台,选择url识别验证码,直接给打码平台验证码图片的链接地址,传回验证码的值。

# -*- coding: utf-8 -*-
import sys, hashlib, os, random, urllib, urllib2
from datetime import *
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class APIClient(object):def http_request(self, url, paramDict):post_content = ''for key in paramDict:post_content = post_content + '%s=%s&'%(key,paramDict[key])post_content = post_content[0:-1]#print post_contentreq = urllib2.Request(url, data=post_content)req.add_header('Content-Type', 'application/x-www-form-urlencoded')opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) response = opener.open(req, post_content) return response.read()def http_upload_image(self, url, paramKeys, paramDict, filebytes):timestr = datetime.now().strftime('%Y-%m-%d %H:%M:%S')boundary = '------------' + hashlib.md5(timestr).hexdigest().lower()boundarystr = '\r\n--%s\r\n'%(boundary)bs = b''for key in paramKeys:bs = bs + boundarystr.encode('ascii')param = "Content-Disposition: form-data; name=\"%s\"\r\n\r\n%s"%(key, paramDict[key])#print parambs = bs + param.encode('utf8')bs = bs + boundarystr.encode('ascii')header = 'Content-Disposition: form-data; name=\"image\"; filename=\"%s\"\r\nContent-Type: image/gif\r\n\r\n'%('sample')bs = bs + header.encode('utf8')bs = bs + filebytestailer = '\r\n--%s--\r\n'%(boundary)bs = bs + tailer.encode('ascii')import requestsheaders = {'Content-Type':'multipart/form-data; boundary=%s'%boundary,'Connection':'Keep-Alive','Expect':'100-continue',}response = requests.post(url, params='', data=bs, headers=headers)return response.textdef arguments_to_dict(args):argDict = {}if args is None:return argDictcount = len(args)if count <= 1:print 'exit:need arguments.'return argDictfor i in [1,count-1]:pair = args[i].split('=')if len(pair) < 2:continueelse:argDict[pair[0]] = pair[1]return argDictdef get_captcha(image_url):client = APIClient()while 1:paramDict = {}result = ''act = raw_input('请输入打码方式url:')if cmp(act, 'info') == 0: paramDict['username'] = raw_input('username:')paramDict['password'] = raw_input('password:')result = client.http_request('http://api.ruokuai.com/info.xml', paramDict)elif cmp(act, 'register') == 0:paramDict['username'] = raw_input('username:')paramDict['password'] = raw_input('password:')paramDict['email'] = raw_input('email:')result = client.http_request('http://api.ruokuai.com/register.xml', paramDict)elif cmp(act, 'recharge') == 0:paramDict['username'] = raw_input('username:')paramDict['id'] = raw_input('id:')paramDict['password'] = raw_input('password:')result = client.http_request('http://api.ruokuai.com/recharge.xml', paramDict)elif cmp(act, 'url') == 0:paramDict['username'] = '********'paramDict['password'] = '********'paramDict['typeid'] = '2000'paramDict['timeout'] = '90'paramDict['softid'] = '76693'paramDict['softkey'] = 'ec2b5b2a576840619bc885a47a025ef6'paramDict['imageurl'] = image_urlresult = client.http_request('http://api.ruokuai.com/create.xml', paramDict)elif cmp(act, 'report') == 0:paramDict['username'] = raw_input('username:')paramDict['password'] = raw_input('password:')paramDict['id'] = raw_input('id:')result = client.http_request('http://api.ruokuai.com/create.xml', paramDict)elif cmp(act, 'upload') == 0:paramDict['username'] = '********'paramDict['password'] = '********'paramDict['typeid'] = '2000'paramDict['timeout'] = '90'paramDict['softid'] = '76693'paramDict['softkey'] = 'ec2b5b2a576840619bc885a47a025ef6'paramKeys = ['username','password','typeid','timeout','softid','softkey']from PIL import ImageimagePath = raw_input('Image Path:')img = Image.open(imagePath)if img is None:print 'get file error!'continueimg.save("upload.gif", format="gif")filebytes = open("upload.gif", "rb").read()result = client.http_upload_image("http://api.ruokuai.com/create.xml", paramKeys, paramDict, filebytes)elif cmp(act, 'help') == 0:print 'info'print 'register'print 'recharge'print 'url'print 'report'print 'upload'print 'help'print 'exit'elif cmp(act, 'exit') == 0:breakreturn result

最后给大家推荐一个资源很全的python学习聚集地,[点击进入],这里有我收集以前学习心得,学习笔记,还有一线企业的工作经验,且给大定on零基础到项目实战的资料,大家也可以在下方,留言,把不懂的提出来,大家一起学习进步

python爬虫豆瓣网的模拟登录实现相关推荐

  1. python爬虫token_Python入门:模拟登录(二)或注册之requests处理带token请求

    转自http://blog.csdn.net/foryouslgme/article/details/51822209 首先说一下使用Python模拟登录或注册时,对于带token的页面怎么登录注册模 ...

  2. python爬虫学习笔记2模拟登录与数据库

    前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...

  3. python爬虫实战(四)--------豆瓣网的模拟登录(模拟登录和验证码的处理----scrapy)...

    在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息. 这两天也在学习怎么去模拟登录,通过自己码的代码和借鉴别人的项目,调试成功豆瓣的模拟登录,顺便处理了怎么自动化的处理验证码 ...

  4. Python爬虫实战(5):模拟登录淘宝并获取所有订单(1)

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 1. python模拟登录淘宝网页 2. 获取登录用户的 ...

  5. Python爬虫实战五之模拟登录淘宝并获取所有订单

    本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 学会应对出现验证码的情况 体会一下复杂的模拟登录机制 探索部分成果 淘宝的密码用了AES加密算法,最终将密码转化为256位,在POS ...

  6. python爬虫豆瓣网TOP250电影海报图片

    最近打算用爬虫爬取一些资料,主要是图片来扩充数据库 先用一些文字信息练手 还是第三方的requests好用呢,比python自带的urllib 好用呢 import requests from bs4 ...

  7. python爬虫 豆瓣影评的爬取cookies实现自动登录账号

    python爬虫 豆瓣影评的爬取cookies实现自动登录账号 频繁的登录网页会让豆瓣锁定你的账号-- 网页请求 使用cookies来实现的自动登录账号,这里的cookies因为涉及到账号我屏蔽了,具 ...

  8. Python爬虫实践-网易云音乐

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  9. Python+Selenium+phantomjs实现网页模拟登录和截图

    Python+Selenium+phantomjs实现网页模拟登录和截图 本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windo ...

  10. 第一篇CSDN博客 python爬虫豆瓣排名前250的电影

    ## 第一篇CSDN博客 python爬虫豆瓣排名前250的电影 1.首先,这是本宝宝的第一篇博客,嘿嘿,有点小激动,之所以采用CSDN发博客呢有两个原因,1是因为现在学的东西比较多,自己学着学着就忘 ...

最新文章

  1. C语言单向链表的实现
  2. 微信小程序如何进行登录授权和获取用户信息
  3. 从洗牌算法谈起--Python的random.shuffle函数实现原理
  4. 第十七届全国大学生完全车模组竞速赛方案 - 草案
  5. : Andorid的Linux基础教学之五 中断机制
  6. python处理大量excel数据-python往excel写入大量数据
  7. SpringBoot-@RequestParam
  8. php开启curl和openssl
  9. MATLAB中调用Weka设置方法(转)及示例
  10. python每秒20个请求_使用Python每秒百万个请求
  11. Oracle goldengate通用配置
  12. 生物特征验证是什么意思
  13. zabbix 自定义监控 排除带报错提示
  14. Hi,我们的代码重构了
  15. 计算机图形学在线作业,18春北交《计算机图形学》在线作业一-2
  16. 用网站(WebSite而不是WebProject)项目构建ASP.NET MVC网站
  17. 20161129 计算95除以55,商是多少,余数是多少?(商和余数要求分两行显示)
  18. 解决win7资源监视器不能开启
  19. 华为应聘进展状态码解析(附加性格测试攻略)
  20. 启动mysql错误解决方案

热门文章

  1. 你的新电脑会预装什么软件?这些才是你装机必备的全家桶!
  2. 一个440MHz的 VGA电路设计与仿真
  3. JAVA:实现HillCipher希尔密码算法(附完整源码)
  4. 【JDBC】使用IDEA连接数据库,执行增删改操作。
  5. 竞拍系统c语言,C++版扫拍卖源代码,非程序,这下不会删帖吧?
  6. 易打卡模板微信签到打卡小程序源码
  7. hive sql 添加字段以及修改字段
  8. SQLserver常用创建表 添加字段sql
  9. 计算机电路电子技术试题答案,数字电子技术基础测试题及其答案.doc
  10. 高等数学 —— 二元函数极值存在定理与拉格朗日乘数法求最值