思路
一、想要实现登录豆瓣关键点
分析真实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 captcha if 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>(.*"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_content req = 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 param bs = 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 + filebytes tailer = '\r\n--%s--\r\n'%(boundary) bs = bs + tailer.encode('ascii') import requests headers = {'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.text def arguments_to_dict(args): argDict = {} if args is None: return argDict count = len(args) if count <= 1: print 'exit:need arguments.' return argDict for i in [1,count-1]: pair = args[i].split('=') if len(pair) < 2: continue else: argDict[pair[0]] = pair[1] return argDict def 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_url result = 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 Image imagePath = raw_input('Image Path:') img = Image.open(imagePath) if img is None: print 'get file error!' continue img.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: break return result
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月19日
2024年11月19日
- Fine乐团《废墟游乐》[320K/MP3][105.13MB]
- 万山红.2009-花开原野万山红Vol.1-2【柏菲】2CD【WAV+CUE】
- 曾庆瑜1992-18首中英文经典全集[台湾派森][WAV整轨]
- 【上扬爱乐】群星-TheSoundsofLS35AVol.4情迷4【低速原抓WAV分轨】
- Fine乐团《废墟游乐》[Hi-Res][24bit 48kHz][FLAC/分轨][767.04MB]
- Cicada《回返 (十五周年自选集)》[320K/MP3][93.87MB]
- Cicada《回返 (十五周年自选集)》[Hi-Res][24bit 48kHz][FLAC/分轨][466.75MB]
- 郑智化.2024-不思议【智在上作】【FLAC分轨】
- 罗文.2015-NEW.XRCD精丫华星】【WAV+CUE】
- 许秋怡.1995-电影少女【丽音唱片】【FLAC分轨】
- 【中国艺术歌曲典藏】温雅欣《她比烟花寂寞》紫银合金SQCD【低速原抓WAV+CUE】
- 张国荣《FinalEncounter》头版限量编号MQA-UHQ[低速原抓WAV+CUE].
- 发烧萨克斯-雪国之春(SRS+WIZOR)[原抓WAV+CUE]
- 王铮亮《慢人理论》[320K/MP3][175.31MB]
- 王铮亮《慢人理论》[FLAC/分轨][524.11MB]