打码接口文件

# -*- coding: cp936 -*-

import sys
import os
from ctypes import * # 下载接口放目录 http://www.yundama.com/apidoc/YDM_SDK.html
# 错误代码请查询 http://www.yundama.com/apidoc/YDM_ErrorCode.html
# 所有函数请查询 http://www.yundama.com/apidoc print('>>>正在初始化...') YDMApi = windll.LoadLibrary('H:/py/16/adc/adc/yamzhm/yundamaAPI-x64') # 1. http://www.yundama.com/index/reg/developer 注册开发者账号
# 2. http://www.yundama.com/developer/myapp 添加新软件
# 3. 使用添加的软件ID和密钥进行开发,享受丰厚分成 appId = 3818 # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
appKey = b'6ff56e09e89fffe45c14abe624af9456' # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得! # print('软件ID:%d\r\n软件密钥:%s' % (appId, appKey)) # 注意这里是普通会员账号,不是开发者账号,注册地址 http://www.yundama.com/index/reg/user
# 开发者可以联系客服领取免费调试题分 username = b'adc8868'
password = b'adc279819' if username == b'test':
exit('\r\n>>>请先设置用户名密码') ####################### 一键识别函数 YDM_EasyDecodeByPath ####################### # print('\r\n>>>正在一键识别...')
#
# # 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
# codetype = 1004
#
# # 分配30个字节存放识别结果
# result = c_char_p(b" ")
#
# # 识别超时时间 单位:秒
# timeout = 60
#
# # 验证码文件路径
# filename = b'H:/py/16/adc/adc/yamzhm/yan_zhe_nma.jpg'
#
# # 一键识别函数,无需调用 YDM_SetAppInfo 和 YDM_Login,适合脚本调用
# captchaId = YDMApi.YDM_EasyDecodeByPath(username, password, appId, appKey, filename, codetype, timeout, result)
#
# print("一键识别:验证码ID:%d,识别结果:%s" % (captchaId, result.value)) ################################################################################ ########################## 普通识别函数 YDM_DecodeByPath ######################### # print('\r\n>>>正在登陆...') # 第一步:初始化云打码,只需调用一次即可
YDMApi.YDM_SetAppInfo(appId, appKey) # 第二步:登陆云打码账号,只需调用一次即可
uid = YDMApi.YDM_Login(username, password) if uid > 0: # print('>>>正在获取余额...') # 查询账号余额,按需要调用
balance = YDMApi.YDM_GetBalance(username, password) print('登陆成功,用户名:%s,剩余题分:%d' % (username, balance)) print('\r\n>>>正在普通识别...') # 第三步:开始识别 # 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = 3000 # 分配30个字节存放识别结果
result = c_char_p(b" ") # 验证码文件路径
filename = b'H:/py/16/adc/adc/yamzhm/yan_zhe_nma.jpg' # 普通识别函数,需先调用 YDM_SetAppInfo 和 YDM_Login 初始化
captchaId = YDMApi.YDM_DecodeByPath(filename, codetype, result) print("普通识别:验证码ID:%d,识别结果:%s" % (captchaId, result.value)) else:
print('登陆失败,错误代码:%d' % uid) ################################################################################ # print('\r\n>>>错误代码请查询 http://www.yundama.com/apidoc/YDM_ErrorCode.html') # input('\r\n测试完成,按回车键结束...')

实现文件

# -*- coding: utf-8 -*-
import os
from urllib import request #导入request模块 import scrapy
from scrapy.http import Request,FormRequest class PachSpider(scrapy.Spider): #定义爬虫类,必须继承scrapy.Spider
name = 'pach' #设置爬虫名称
allowed_domains = ['douban.com'] #爬取域名
# start_urls = [''] #爬取网址,只适于不需要登录的请求,因为没法设置cookie等信息 header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'} #设置浏览器用户代理 def start_requests(self):
"""第一次请求一下登录页面,设置开启cookie使其得到cookie,设置回调函数"""
print("第一次请求页面获取Cookies.........!")
return [Request('https://accounts.douban.com/login',meta={'cookiejar':1},callback=self.parse,headers=self.header)] def parse(self, response):
# 响应Cookies
Cookie1 = response.headers.getlist('Set-Cookie') #查看一下响应Cookie,也就是第一次访问注册页面时后台写入浏览器的Cookie
print('后台首次写入的响应Cookies:',Cookie1) #判断是否出现验证码
yzhm = response.xpath('//img[@id="captcha_image"]/@src').extract()
if len(yzhm) > 0:
print("出现验证码,请输入验证码")
print('验证码图片地址:',yzhm)
#将验证码图片保存到本地
file_path = os.path.join(os.getcwd() + '/adc/yamzhm/yan_zhe_nma.jpg') # 拼接图片保存路径
print(file_path)
request.urlretrieve(yzhm[0], file_path) # 将图片保存到本地,参数1获取到的src,参数2保存路径 #使用在线打码,自动识别验证码
from adc.yamzhm import YDMPython3 #导入打码模块
yan_zhen_ma = str(YDMPython3.result.value,encoding='utf-8') #接收打码结果
print('写入验证码',yan_zhen_ma) data = { # 设置用户登录信息,对应抓包得到字段
'source': 'None',
'redir': 'https://www.douban.com/people/81309370/',
'form_email': '729088188@qq.com',
'form_password': 'adc279819',
'login': '登录',
'captcha-solution': yan_zhen_ma
} print('第二次post请求携带Cookies授权,登录中........!') """第二次用表单post请求,携带Cookie、浏览器代理、用户登录信息,进行登录给Cookie授权"""
return [FormRequest.from_response(response,
url='https://accounts.douban.com/login', #真实post地址
meta={'cookiejar':response.meta['cookiejar']},
headers=self.header,
formdata=data,
callback=self.next,
)]
else:
data = { # 设置用户登录信息,对应抓包得到字段
'source': 'None',
'redir': 'https://www.douban.com/people/81309370/',
'form_email': '729088188@qq.com',
'form_password': 'adc279819',
'login': '登录',
} print('第二次post请求携带Cookies授权,登录中........!') """第二次用表单post请求,携带Cookie、浏览器代理、用户登录信息,进行登录给Cookie授权"""
return [FormRequest.from_response(response,
url='https://accounts.douban.com/login', # 真实post地址
meta={'cookiejar': response.meta['cookiejar']},
headers=self.header,
formdata=data,
callback=self.next,
)] def next(self,response):
# 请求Cookie
Cookie2 = response.request.headers.getlist('Cookie')
print('登录时携带请求的Cookies:',Cookie2) dlujieg = response.xpath('/html/head/title/text()').extract()
if dlujieg:
print('登录响应结果:',dlujieg)
else:
jieg = response.body.decode("utf-8") #登录后可以查看一下登录响应信息
print('登录响应结果:',jieg) print('第三次请求携带授权Cookie,请求需要登录才能查看的页面.........!')
yield Request('https://www.douban.com/people/81309370/',meta={'cookiejar':True},headers=self.header,callback=self.next2) def next2(self,response):
# 请求Cookie
Cookie3 = response.request.headers.getlist('Cookie')
print('查看需要登录才可以访问的页面携带Cookies:',Cookie3) leir = response.xpath('/html/head/title/text()').extract() #得到个人中心页面
print('最终内容',leir)
# leir2 = response.xpath('//div[@class="set-tags"]/a/text()').extract() # 得到个人中心页面
# print(leir2)

十四 web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码的更多相关文章

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

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

  2. 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...

  3. 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

    第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...

  4. 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

    第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用 xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 ...

  5. 第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令 Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --u ...

  6. 十二 web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

    模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里 ...

  7. 十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --upgrade pip2.安装,wheel(建议网络安装) pip install wheel ...

  8. 十一 web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

    xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 /@x 表示查找指定属性的值,可以连缀如:@id @src [@属性名称= ...

  9. 十三 web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...

随机推荐

  1. Oracle trigger 触发器

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  2. linux文件修改管理

    Linux文件系统的层次结构 Linux文件系统的树状结构 目录是什么 顶层根目录的表示 文件系统中的两个特殊目录 Linux系统中的一些重要的目录 bin目录 sbin目录 家目录 dev目录 et ...

  3. Multiple encodings set for module chunk explatform "GBK" will be used by compiler

    项目用idea启动的时候,突然报了个这个 Multiple encodings set for module explatform "GBK" will be used by co ...

  4. 《UML和模式应用》读书笔记(一)面向对象分析和设计简单示例

    在开始进行对象分析和设计之前,先通过“扔骰子”这个软件(游戏者扔两个骰子,如果总是是7,则赢,否则输),来简单分析下这个过程. 1:用例 需求分析,可能包括人们如何应用的场景或情节,这些都可以被编写成 ...

  5. 一只代码小白git托管路上的二三事

    [经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...

  6. pxe无人值守自动安装

    rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmyum listyum upda ...

  7. [Linux 006]——grep和正则表达式

    在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...

  8. 20145322第九周JAVA程序设计基础学习总结

    20145322第九周JAVA程序设计基础学习总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范.它定义一组标准类与接口,应用程序需要 ...

  9. shell编程(二)

    case判断 前面了解了shell编程的if判断,其实除了if判断,还有case判断. case语法: case VAR in case1) command1 ;; case2) command2 ; ...

  10. php实现dota天梯、wow竞技场、lol排位赛匹配加分算法ELO

    public function marchOpponents() { $rstep = Yii::$app->params['ratingStep'];//(随机范围) $rsN=100; $d ...