1. 程式人生 > >工大助手(C#與python互動)

工大助手(C#與python互動)

工大助手(爬蟲——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進行相應的處理,並將結果返回給前端,這樣的體系結構更加完備。