工大助手(C#與python互動)
阿新 • • 發佈:2018-12-29
工大助手(爬蟲——C#與python互動)
基本內容
- 工大助手(桌面版)
- 實現登陸、查成績、計算加權平均分等功能
團隊人員
工大教務爬蟲編寫(C#與python互動)
完成python的爬蟲之後就需要考慮如何與前端進行互動。我們最初的設想是C/S架構,因為學校的伺服器只能內網訪問,我們想在實驗室搭起一臺伺服器作為代理伺服器,但在內網地址如何對映到外網上我們沒有找到很好的辦法,這也是我們接下來開發的目標。
沒有了代理伺服器,我們的任務就變成由爬蟲獲取資料,之後在客戶端上展示出來,這就涉及到了C#與python之間的互動。經過搜尋,我們找到了ironpython,一種在.NET和Mono上實現的Python語言,可以很方便地在C#中呼叫相應的python函式。
示例(C#):
using IronPython.Hosting;
ScriptRuntime pyRuntime = Python.CreateRuntime();
dynamic obj = pyRuntime.UseFile("testScore.py");
String tmp = obj.getC();
示例(python):
def getC(): try: CaptchaUrl = "http://gdjwgl.bjut.edu.cn/CheckCode.aspx" picture = opener.open(CaptchaUrl).read() local = open('image.jpg', 'wb') local.write(picture) local.close() return "success" except urllib2.URLError, e: if hasattr(e,"result"): return e.result return "Error"
上面的示例程式碼是在C#中呼叫python中寫好的函式,實現爬取驗證碼的功能。但同時因為ironpython是一種在.NET和Mono上實現的Python語言,所以並不支援所有python的包,例如之前用來分析網頁的BeautifulSoup在ironpython中就無法正常使用,搜尋相應的解決方案也沒有找到答案。所以將分析網頁部分轉移到了C#上,利用C#的HtmlAglity進行網頁分析,提取相應的資訊,並作為引數傳入到python中。
在之後的迭代開發中,我們會新增代理伺服器,就不再需要ironpython,而是C#向伺服器端傳送一個請求,伺服器端由python進行相應的處理,並將結果返回給前端,這樣的體系結構更加完備。