怎么绕过验证码? 利用 2Captcha 验证码识别服务突破 reCAPTCHA 验证码,抓取证券柜买中心的券商买卖证券日报表上分点交易资讯

  • LargitData
  • 2021年6月29日 05:47

有在操作股票的朋友们一定知道,证券柜买中心的券商买卖证券日报表上包含了每日上柜股票的分点交易资料,透过研究分点资料,便可以分析大户进出行为,进而跟单获利。但是券商买卖证券日报表上面埋有reCAPTCHA验证码,透过一堆图片验证题目,阻止我们的自动化网路爬虫大军去上面大量捞取资料。 但reCAPTCHA 验证码怎么识别? 因此大数软体 X 大数学堂,今天就要教你该如何撰写一Python网路爬虫,再搭配2Captcha验证码识别服务,便可以轻轻松松突破券商买卖证券日报表上的 reCAPTCHA 验证码服务,顺利抓取分点交易资讯。


 

首先,我们想要了解如何透过Python 网路爬虫了解如何抓取买卖证券日报的资料。因此我们采取以下步骤,寻找带有我们所需资料的请求连结:

  1. 1. 打开 Chrome 浏览器,连结至证券柜买中心的券商买卖证券日报表(https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw)

 

 

  1. 2. 点击滑鼠右键,点选检查

 

  1. 3. 将开发人员工具的页签切换到 Network

 

  1. 4. 点击「我不是机器人」、键入股号: e.g. 1240,按下「查询」


 

  1. 5. 复制页面上看到的文字 (e.g. 2,023,771),贴到搜寻框中按搜寻,点击搜寻框中有用蓝色底色标注的文字区域

 

  1. 6. 找到回应内容后(Response),切换到标头(Headers),寻找到对应的请求连结

 


 

  1. 7. 可以从Request Method 中发现Requset URL为 (https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw),而存取方法是用POST 方法


 

  1. 8. 卷动卷轴,找到POST 带的Form Data,可以发现参数列除了股票代号(stk_code:1240)外,还带有g-recaptcha-response 这段字串



 

好了,现在问题来了。我们知道 stk_code 里面要填的是股票的代号,但是g-recaptcha-response 里面该填什么呢? 我们可以猜想g-recaptcha-response 里面填的应该是 reCAPTCHA 的Token,但问题是,应该要如何取得reCAPTCHA 的 Token 呢? 

 

聪明的你应该可以想得到,这时候我们应该要透过点选页面上「我不是机器人的」的选择框,才能获得 Token ,这段我们可以透过 SeleniumPyAutoGUI 自动化。但是如果你真的模拟点了几次后,这时 reCAPTCHA 最烦人的验证机制 - 图片验证,要你从九宫格中选出正确图片的题型就会开始跳出来。

 

验证码怎么识别

该怎么绕过验证码? 当然如果你熟悉深度学习技术的话,你可以用影像识别技术突破这一段,但该怎么搜集要训练的影像资料?怎么训练影像辨识模型?一共要花多少时间?却变成一个大难题,让现在写网路爬虫的,还要懂得AI 才能搞。

 

reCAPTCHA 验证码

 

验证码识别服务

这时,好用的验证码识别服务2Captcha,就派上用场啦 !你可以先到 2Captcha 的官网 ( 点选我的推荐连结)。在注册一个会员后,接者登入后,根据指示入金。

 

2Captcha 服务

 

根据官网说明,该服务破解1,000 个普通验证码收费 0.78 美元(约21.76 元台币),也就是说破解一个验证码只要 0.02176 元台币:而破解1,000 个reCatcha 也只收费 2.99 美元(约83.45 元台币),价格可以说是非常划算。

 

如果你想靠帮人在网路上点验证码赚点外快的话,他们也有提供在网赚方案。(不过点一千个才0.4 美金,对时间宝贵的人可说不划算。)

 

 

在登入后,也入金的情况下,你可以在使用者的仪表板页面 (2Captcha.com/enterpage">https://2Captcha.com/enterpage) 下识别(Recognition)的区块找到个人的 API KEY(红色字部分) ,你可以将该 API Key 复制起来,作为待会网路爬虫破解之用。

API KEY

 

等一切就绪后,就开始我们的破解流程。

 

  1. 1. 进到要破解页面 (https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw) 

 

 

  1. 2. 在页面上点选滑鼠右键,选择检视原始码 (或按 ctrl + U)


 

  1. 3. 用 ctrl + f 搜寻关键字g-recaptcha (橘色的部分)并找到后面的 data-sitekey (蓝底选择的部分)

 

  1. 4. 或用requests 搭配 BeautifulSoup 直接找出 data-sitekey 

 

import requests
from bs4 import BeautifulSoup

pageurl = 'https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw'
res1 = requests.get(pageurl)
soup = BeautifulSoup(res1.text)
googlekey = soup.select_one('.g-recaptcha').get('data-sitekey')

 

  1. 5. 将 pageurl, googlekey 跟 2catcha 验证码识别服务的 key 当成参数,输入至 2Captcha 的API 接口 (2Captcha.com/in.php">http://2Captcha.com/in.php),更多说明可以参阅说明文档 (2Captcha.com/2Captcha-api">https://2Captcha.com/2Captcha-api)


 

res2 = requests.get(f'http://2Captcha.com/in.php?key={key}&method=userrecaptcha&googlekey={googlekey}&pageurl={pageurl}')
print(res2.text)

 

  1. 6. 如果回传结果带有 OK 字串(e.g. OK|67361246930),则 | 右边的数字为此次验证批次的ID,我们需要将ID与key 当作参数,输入给产生验证结果的 API 端口 (2Captcha.com/res.php">http://2Captcha.com/res.php) 

 

rid = res2.text.split('|')[1]
res3 = requests.get(f'http://2Captcha.com/res.php?key={key}&id={rid}&action=get')
print(res3.text)

 

  1. 7. 如果回传结果带有 OK 字串(e.g. OK|03AGdBq26JC9X-),则 | 右边的字串即为 reCAPTCHA 的 g-recaptcha-response Token,我们最后只要用该 Token 搭配股票代号作为查询条件,便可以突破reCAPTCHA 的限制,让我们轻松获得分点资讯。

payload = {
   'g-recaptcha-response': res3.text.split('|')[1],
   'stk_code': '1240'
}
res4 = requests.post('https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw', data = payload)

 

  1. 8. 最后再用 Pandas 整理资料

import pandas
dfs = pandas.read_html(res4.text)
dfs[2].columns = dfs[2].iloc[0]
df1 = dfs[2].drop(0)

dfs[3].columns = dfs[3].iloc[0]
df2 = dfs[3].drop(0)

df = pandas.concat([df1, df2]).set_index('序号')

df

 

 

大功告成,最后你应该可以看到如下图的抓取结果。透过2Captcha 的验证码识别服务,的确能够轻松解决reCAPTCHA验证码。如此一来,我们就能够每日追踪大户的买卖明细,再加以分析后,便能根据大户的买卖数据,拒当韭菜,赚取获利欧!

 

 

附上本文章程式码可以于我的 Github (https://github.com/ywchiu/largitdata)下找到 ,如果想要了解更多网路爬虫相关知识,请关注大数学堂,与大数软体粉丝页

 

本文章是由 2Captcha验证码识别服务 赞助撰写,如有技术合作或业务合作事宜,可以直接透过EMAIL 联络我欧