以往爬蟲沒怎麼研究過,最近有個需求,要從某網站采集敏感資訊,稍稍考慮了一下,決定利用C# Winform和Python一起來解決這個事件。
整個解決方案不複雜:C#編寫WinForm窗體,進行資料分析和采集, Python本來不想用的,一下子沒找到C#下Woff字型轉Xml的方案,而網上Python的則有很多,是以就加了一個Python方案,雖然就1個腳本。
一、幾個步驟:
首先要模拟登入,登入完了進入履歷采集,然後模拟下載下傳,下載下傳完了以後就可以看到求職者的電話了。
這個電話号碼是使用動态生成的Base64字型,是以直接提取文字是無法成功的。
1、先将Base64轉成Woff字型,這個可以用C#完成(這其中的iso-8859-1編碼是個坑,一般用Default會出現驚喜):
SetMainStatus("正在生成WOFF...");
byte[] fontBytes = Convert.FromBase64String(CurFont);
string fontStr = Encoding.GetEncoding("iso-8859-1").GetString(fontBytes).TrimEnd('\0');
StreamWriter sw2 = new StreamWriter(@"R58.woff", false, Encoding.GetEncoding("iso-8859-1"));
sw2.Write(fontStr);
sw2.Close();
2、再将已經生成的Woff轉成XML(WoffDec.exe是我用Python打包的Exe,其實有點小題大做了,為了這一個轉化專門打了一個包,有時間還是整一個C#下面的好)
//調用python exe 生成xml檔案
ProcessStartInfo info = new ProcessStartInfo
{
FileName = "WoffDec.exe",
WindowStyle = ProcessWindowStyle.Hidden
};
Process.Start(info).WaitForExit(2000);//在2秒内等待傳回
整個WoffDec.py的代碼就3行:
from fontTools.ttLib import TTFont
font = TTFont('R12.woff')
font.saveXML('R12.xml')
這個打包是有點意思的,先試了py2exe,不成功,換pyinstaller, 成了,連EXE一起有11M,也不是很大。
https://github.com/pyinstaller/pyinstaller 下載下傳,或者在VS2017 Python環境下搜尋PyInstaller直接安裝。
右鍵使用“打開此處的指令提示符”;輸入pyinstaller /path/to/yourscript.py即可打包成一個exe檔案。在Winform應用調用時,應該整個檔案夾都拷貝過去。
3、XML檔案有了以後,以上面的Woff檔案為基準準備為一個資料字典存儲起來(這個地方有點繞,先找一個網站把Woff顯示成文字和編碼,然後根據編碼在XML中查找它的字型定位點,我取的X和Y組成唯一值(X,Y就代表一個字),當然也可以取更多;
internal static readonly Dictionary<string, string> DicChar = new Dictionary<string, string>()
{
{"91,744","0" },
{"570,0","1"},
{"853,1143","2" },
{"143,259","3" },
。。。。。。
};
4、上面這一步是要花點時間的,基準字典有了以後,就可以按每次生成的XML檔案來進行比對真實文字了。
5、真實文字取出後面的就簡單了,直接采集到資料庫,再連上短信發送業務,就可以自動群發了。
二、使用場景
上班後開啟采集服務即不用再理會,由系統每間隔一段時間自動下載下傳履歷,并自動推送面試邀請短信。隻要有新人釋出對口的求職資訊,系統就會馬上給他發送邀請,實為搶人利器。
BTW:網頁模拟操作使用的CEFSharp将另開一章。