工大助手(爬虫——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进行相应的处理,并将结果返回给前端,这样的体系结构更加完备。