我们在登录很多网站的时候应该都会遇到验证码吧,今天要用第三方的自动识别。
今天用的网站是古诗文网,它的界面是这样的:
思路就是:爬取网页,获取图片,将图片加载到本地,然后再用第三方识别出来,马上开干。
最先做的还是导包
代码语言:javascript复制import requests
from lxml import etree
接下来就是爬取网页
代码语言:javascript复制def get_code():
url = "https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
}
page_text = requests.get(url=url, headers=headers).text
然后就是要开始标签和属性的定位了,先打开F12查看一下图片所在的位置。
可以看到图片在一个class=‘mainreg2’的div标签下面的三个div标签中的第三个,可以这样定位://div[@class='mainreg2'][3]/img/@src(注意不是[4]啊!!!)这里有点疑惑,研究了一晚上,明天再继续研究。
早上好,继续研究,现在奇怪的就是div[@class='mainreg2']的标签应该在div标签中的第四个,但是索引却是3。然后我尝试打印了第一条索引的结果
代码语言:javascript复制re = tree.xpath("//div[@class='mainreg2'][1]")
出来的结果居然有两个
代码语言:javascript复制[<Element div at 0x1fff216e948>, <Element div at 0x1fff218cec8>]
那就说明索引为1的div[@class='mainreg2']的标签有两个,我猜测应该是因为他们不是同一级的
第一个1是他层级里的第一个,第二个1也是他层级里的第一(我的猜测),由于网上没有找到资料,我只能这样了。
代码语言:javascript复制 tree = etree.HTML(page_text)
# 验证码所在位置
img_code = tree.xpath("//div[@class='mainreg2'][3]/img/@src")[0]
# 图片地址
code_url = "https://so.gushiwen.cn" img_code
# 爬取图片
img_data = requests.get(url=code_url,headers=headers).content
# 持久化存储
with open("b.jpg", "wb") as fp:
fp.write(img_data)
print("done")
get_code()
这里我把整个过程封装起来,因为这样当别的文件导入这个模块时就会自动调用这个函数。
现在来看第三方自动识别,这里用的是超级鹰,注册了账号以后还送了1000题分,现在来看看如何使用。
这是超级鹰破解验证码的价格体系,1000题分已经够我用很多次了。
要想使用超级鹰,我们还需要设置软件ID,下载api文档中的demo,大概意思就是,要借助这个接口来破解验证码吧。
选择python
将文件下好以后是一个压缩包,解压后,拖到pycharm中,是这样的一个包,那个Get_code.py是我自己拖进去的文件。
点开文件后是这样的,太长了,只截取一部门重要的地方。
这个时候我们将username和password替换成我们自己的账号和密码,刚刚的软件ID替换掉96001这串数字,b.jpg就是我们要破解的验证码的图片,下面的1004就是刚刚上面价格体系中的类型代码。所以刚刚我们爬取的图片就是放在这个文件夹中,然后运行这个文件就可以破解验证码了,在前面先导入一下刚刚的爬取验证码文件。
这样在运行时,首先导入模块,随后调用了里面的函数,这样我们的图片就保存在我们的文件夹中了,而且验证码还是动态变化的,每次重新执行都会重新对网页发起请求,所以每一次爬取下来的验证码都是不一样的,现在来试一下。
破解出来的验证码是fgh3,我们打开图片验证一下。
对了
这就是大致的过程,还可以用这个方法模拟登录,但我现在还没有找到合适的网站,需要cookie才可以,但是马上就要学到啦!