python爬虫豆瓣网的模拟登录实现
这篇文章主要介绍了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爬虫豆瓣网的模拟登录实现相关推荐
- python爬虫token_Python入门:模拟登录(二)或注册之requests处理带token请求
转自http://blog.csdn.net/foryouslgme/article/details/51822209 首先说一下使用Python模拟登录或注册时,对于带token的页面怎么登录注册模 ...
- python爬虫学习笔记2模拟登录与数据库
前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...
- python爬虫实战(四)--------豆瓣网的模拟登录(模拟登录和验证码的处理----scrapy)...
在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息. 这两天也在学习怎么去模拟登录,通过自己码的代码和借鉴别人的项目,调试成功豆瓣的模拟登录,顺便处理了怎么自动化的处理验证码 ...
- Python爬虫实战(5):模拟登录淘宝并获取所有订单(1)
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 1. python模拟登录淘宝网页 2. 获取登录用户的 ...
- Python爬虫实战五之模拟登录淘宝并获取所有订单
本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 学会应对出现验证码的情况 体会一下复杂的模拟登录机制 探索部分成果 淘宝的密码用了AES加密算法,最终将密码转化为256位,在POS ...
- python爬虫豆瓣网TOP250电影海报图片
最近打算用爬虫爬取一些资料,主要是图片来扩充数据库 先用一些文字信息练手 还是第三方的requests好用呢,比python自带的urllib 好用呢 import requests from bs4 ...
- python爬虫 豆瓣影评的爬取cookies实现自动登录账号
python爬虫 豆瓣影评的爬取cookies实现自动登录账号 频繁的登录网页会让豆瓣锁定你的账号-- 网页请求 使用cookies来实现的自动登录账号,这里的cookies因为涉及到账号我屏蔽了,具 ...
- Python爬虫实践-网易云音乐
1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...
- Python+Selenium+phantomjs实现网页模拟登录和截图
Python+Selenium+phantomjs实现网页模拟登录和截图 本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windo ...
- 第一篇CSDN博客 python爬虫豆瓣排名前250的电影
## 第一篇CSDN博客 python爬虫豆瓣排名前250的电影 1.首先,这是本宝宝的第一篇博客,嘿嘿,有点小激动,之所以采用CSDN发博客呢有两个原因,1是因为现在学的东西比较多,自己学着学着就忘 ...
最新文章
- C语言单向链表的实现
- 微信小程序如何进行登录授权和获取用户信息
- 从洗牌算法谈起--Python的random.shuffle函数实现原理
- 第十七届全国大学生完全车模组竞速赛方案 - 草案
- : Andorid的Linux基础教学之五 中断机制
- python处理大量excel数据-python往excel写入大量数据
- SpringBoot-@RequestParam
- php开启curl和openssl
- MATLAB中调用Weka设置方法(转)及示例
- python每秒20个请求_使用Python每秒百万个请求
- Oracle goldengate通用配置
- 生物特征验证是什么意思
- zabbix 自定义监控 排除带报错提示
- Hi,我们的代码重构了
- 计算机图形学在线作业,18春北交《计算机图形学》在线作业一-2
- 用网站(WebSite而不是WebProject)项目构建ASP.NET MVC网站
- 20161129 计算95除以55,商是多少,余数是多少?(商和余数要求分两行显示)
- 解决win7资源监视器不能开启
- 华为应聘进展状态码解析(附加性格测试攻略)
- 启动mysql错误解决方案
热门文章
- 你的新电脑会预装什么软件?这些才是你装机必备的全家桶!
- 一个440MHz的 VGA电路设计与仿真
- JAVA:实现HillCipher希尔密码算法(附完整源码)
- 【JDBC】使用IDEA连接数据库,执行增删改操作。
- 竞拍系统c语言,C++版扫拍卖源代码,非程序,这下不会删帖吧?
- 易打卡模板微信签到打卡小程序源码
- hive sql 添加字段以及修改字段
- SQLserver常用创建表 添加字段sql
- 计算机电路电子技术试题答案,数字电子技术基础测试题及其答案.doc
- 高等数学 —— 二元函数极值存在定理与拉格朗日乘数法求最值