使用 requests 获取 Discuz 论坛验证码

requests 库的安装

Mac 下使用 Pycharm 时只需按住快捷键 Command + , 选择 Project→Project Interpreter 点击 + 号后搜索 requests 进行安装即可:

获取过程使用的方法

  • requests.get(url, params=None, **kwargs)
    url 是请求的链接,params 是发送请求时参数,kwargs 是可选参数。

获取过程

为了保持连接的持久性不能直接使用 requests 发送请求,而需要利用 Session 对象。具体获取代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
session = requests.session()
ss = session.get("http://www.zhuixinfan.com/member.php?mod=register")
result = ss.text
#获取参数
params = re.findall("<input.*(?:name=\"formhash\"|name=\"sechash\").*\>", result)
params = list(set(params))
sechash = re.sub(".*value=\"", "", params[1])
sechash = re.sub("\".*", "", sechash)
#更新验证码
actually_url = "http://www.zhuixinfan.com/misc.php?mod=seccode&action=update&idhash=" + sechash
htm = session.get(actually_url)
#获取图片链接
update_url = re.findall(r"\bsrc=\S*", htm.text)
update = re.sub("src=\"", "", update_url[0])
update = re.sub("\"", "", update)
#下载图片
headers = {
'Host': 'www.zhuixinfan.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',
'Referer': 'http://www.zhuixinfan.com/member.php?mod=register'
}
url = "http://www.zhuixinfan.com/" + update
result = session.get(url, headers=headers)
im = Image.open(BytesIO(result.content))
im.show()

获取过程中首先向站点发送请求,从返回的网页信息中利用正则表达式获取 sechash 参数,之后利用所得到的 sechash 向站点发送更新验证码的请求并从返回的信息中获取验证码图片的 url,最后从站点下载图片利用 Image.open() 显示图片。


参考资料

Requests: 让 HTTP 服务人类