2019独角兽企业重金招聘Python工程师标准>>>

通过Python程序模拟访问北京预约挂号统一平台,包括验证码识别、登陆、按医院、时间、科室查询可约号等。

本程序仅为学习使用,请勿用于其他用途。

1.获取验证码图片

def getCodePic():randNum = random.random()url = "http://www.bjguahao.gov.cn/comm/code.php?id="+str(randNum)resp = urllib2.urlopen(url)tmp_pic="c:\\tmp.gif"open(tmp_pic,"wb").write(resp.read())return tmp_pic

将验证码图片保存为C:\tmp.gif

2.识别验证码

#识别 ”http://www.bjguahao.gov.cn/comm/logon.php“验证码
#验证码特征如下:
#1.验证码图片大小为38*15(宽*高);
#2.验证码包为4个1-9的数字;
#3.数字大小为6*8(宽*高),数字区域据距图片(左上右下)的边距分别为(5,4,6,3),每个数字间隔1个像素;
#4.数字颜色为红色,有粉色干扰噪点。
#
#识别方法:
#1.由于验证码比较简单且固定,可先获取1-9每个数字的样本;
#2.提取验证码中的每个数字,与样本进行比对,获取具体的数字。

#1-9的数据样本
yzm_keys={1:"001100011100101100001100001100001100001100111111",2:"011110110011110011000011001110011000110000111111",3:"011110110011000011011110000011000011110011011110",4:"000011000111001111011011110011111111000011000011",5:"111111110000111110110011000011000011110011011110",6:"011110110011110000111110110011110011110011011110",7:"111111000011000110000110001100001100011000011000",8:"011110110011110011011110110011110011110011011110",9:"011110110011110011110011011111000011110011011110",}
#识别一个数字
def reg_one(im):ss=""for y in range(0,8):for x in range(0,6):v = im.getpixel((x,y))if v==3:ss+="1"else:ss+='0'for i in range(1,10):if yzm_keys[i] == ss:return i        print "reg failed."
#传入验证码图片,识别4位验证码
def reg_yzm(f):im = Image.open(f)      im1 = im.crop(( 5,4,11,12))im2 = im.crop((12,4,18,12))im3 = im.crop((19,4,25,12))im4 = im.crop((26,4,32,12))return "%d%d%d%d" %(reg_one(im1),reg_one(im2),reg_one(im3),reg_one(im4))

3.登陆系统

需要事先注册。然后通过身份证,名字和验证码登陆。这里需要考虑Cookies问题,在后面说明。

def login(code):url = "http://www.bjguahao.gov.cn/comm/logon.php"req = urllib2.Request(url,urllib.urlencode({"sfzhm":"0000000000000000","truename":"张三","yzm":code}))  #身份证和名字需要按实际情况填写resp = urllib2.urlopen(req)  res = resp.read()if len(res)==0:print "login success."else:print "error:",res

4.查询指定日期、指定医院、指定科室的预约情况

以下代码查询指定日期,航空总医院的产科门诊和产科专家门诊的预约情况。返回值为html。

def query(riqi):hpid='166' #航空总医院keid1='050142' #产科门诊keid2='050143' #产科专家url = "http://www.bjguahao.gov.cn/comm/ghao.php"req1 = "%s?hpid=%s&keid=%s&date1=%s" %(url,hpid,keid1,riqi)resp1 = urllib2.urlopen(req1)req2  = "%s?hpid=%s&keid=%s&date1=%s" %(url,hpid,keid2,riqi)resp2 = urllib2.urlopen(req2)return resp1.read(),resp2.read()

5.输出查询结果

通过解析查询结果的HTML,输出信息。

def parse_print(html1,html2):#print "%10s %4s %4s %16s %16s %16s %4s %4s %4s %4s %4s" %('日期','星期','时间','科室','医生','职称','费用','专长','可挂','剩余','状态')seq1,seq2=parse_html.parse(html1)if len(seq1) == 11 :seq1.remove(seq1[7])for i in seq1:print i,print ""if len(seq2) == 11 :   seq2.remove(seq2[7])    for i in seq2:print i,  print ""  seq1,seq2=parse_html.parse(html2)if len(seq1) == 11 :seq1.remove(seq1[7])for i in seq1:print i,print ""if len(seq2) == 11 :  seq2.remove(seq2[7])    for i in seq2:print i,  print ""

parse_html.py如下

#!/usr/bin/python
# -*- coding: utf-8 -*-def parse_struct(s):stru=[]while len(s)>3:i1 = s.find("<td>")i2 = s.find("</td>")if i1<0 or i2<0:breakt = s[i1+4:i2]   stru.append(t)#print ts = s[i2+5:]return strudef parse(ss):tr_end_1 = ss.rfind("</tr>")tr_beg_1 = ss.rfind("<tr>")tr_end_2 = ss.rfind("</tr>",0,tr_beg_1)tr_beg_2 = ss.rfind("<tr>",0,tr_end_2)s1 = ss[tr_beg_2+5:tr_end_2]s2 = ss[tr_beg_1+5:tr_end_1]seq1= parse_struct(s1)seq2= parse_struct(s2)#for i in seq1:# print ireturn seq1,seq2if __name__ == "__main__":parse(open("c:\\2014-04-23.html","rb").read())

6.预约挂号

这一部分还没写,原理基本差不多,生成要预约人的url,进行请求。会向手机发送一个验证码,然后输入验证码,预约成功。

7.运行结果

8.Cookies设置

Cookies是啥?为啥需要Cookies?这里就不细说了,感兴趣的可以baidu之。这里就说怎么设置。

其实也很简单,Python的urllib2模块本身就支持设置Cookies的功能。

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [#('Host','www.bjguahao.gov.cn'),('User-Agent','Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0'),#('Accept','image/png,image/*;q=0.8,*/*;q=0.5'),#('Accept-Language','zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'),#('Accept-Encoding','gzip,deflate'),('Referer','http://www.bjguahao.gov.cn/comm/index.html'),#('Connection','keep-alive'),#('Cookie','Hm_lvt_13e29334f151c8514bf6cf2533b9d9af=1395393461,1396936299,1397179537,1397461271; __c_review_45359=3; __c_last_45359=1397465208535; __c_visitor=1395393460566784; __c_sesslist_45359=drcwufogsr_cha%252Cdr9bf2510a_ch7%252Cch4; __c_today_45359=1; PHPSESSID=67003ba345132df2ef80474312c7b669; __c_pv_45359=21; __c_session_45359=1397461271515659; __c_session_at_45359=1397466158924; Hm_lpvt_13e29334f151c8514bf6cf2533b9d9af=1397465209')]
urllib2.install_opener(opener)

注意Cookies要在程序已开始就设置好。

转载于:https://my.oschina.net/u/2326085/blog/391364

Python程序访问北京预约挂号平台相关推荐

  1. 北京114预约挂号平台今启用 预约挂号网站已上线

    到北京看病,拨一个电话号码就能预约40家医院的号.北京市114统一预约挂号平台今天上午正式开通,首批纳入统一预约挂号平台的有30家三级大医院,如果加上二级医院,通过114进行预约的医院已经达40家左右 ...

  2. 实现北京114挂号平台自动挂号功能

    前言 实现思路 准备工作 网站分析 编程实践 - 构建自己的HttpClient让自己的访问一直是在同一个session下 - 获取医生索引网页基本信息 - 实现模拟登录功能 - 发送短信方法 - 实 ...

  3. SearchAppoint——北京市预约挂号平台查询器

    这个算是用python写的第一个GUI程序,功能是查询北京市预约挂号平台上的各医院各科室的最近预约号源. 由于这个比较偏应用,所以这里不直接贴代码.github地址:点击打开链接 程序主界面: 在启动 ...

  4. 前端系列之实战(城市医院预约挂号平台2.基本样式编写)

    伤情最是晚凉天,憔悴厮人不堪言,吆酒催肠三杯醉,寻香惊梦五更寒, 钗头凤斜倾有泪,徒迷花寥我无缘,小楼寂寞心与月,也难如钩也难圆! 书接上文:前端系列之实战(城市医院预约挂号平台1.框架搭建) 基本样 ...

  5. 前端系列之实战(城市医院预约挂号平台3.UI组件)

    大将生来胆气豪,腰横秋水雁翎刀,风吹橐鼓山河动,电闪旌旗日月高, 天上麒麟原有种,穴中蝼蚁岂能逃,太平待到归来日,朕与将军解战袍. 书接上文: 前端系列之实战(城市医院预约挂号平台2.基本样式编写) ...

  6. 基于SSH开发九洲世纪医院预约挂号平台

    基于S2SH开发九洲世纪医院预约挂号平台(前台+后台)(大作业/毕业设计) 开发环境: Windows操作系统 开发工具: MyEclipse(Eclipse)+Jdk+Tomcat+MYSQL数据库 ...

  7. ssm基于小程序的医院预约挂号系统毕业设计源码260839

    SSM医院预约挂号小程序的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以 ...

  8. 应用系统设计:预约挂号平台,B2C平台设计

    项目总结 这个项目是一个预约挂号系统.分为前后台两个系统,前台用来进行挂号和支付,后台管理医院发送过来的挂号信息.整个项目采用微服务的方式进行开发. 项目代码结构 父类项目 comm模块(公共模块) ...

  9. PHP基于微信小程序的医院预约挂号系统 uniapp 小程序

    随着信息化时代的到来,管理系统都趋向于智能化.系统化,医院预约挂号系统小程序也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而医 ...

最新文章

  1. idea上传项目到码云_mall前端项目的安装与部署
  2. 法国拟将雷诺与日产合并 代表团抵日进行谈判
  3. 软件相关模块与ansible剧本
  4. Codeforces 486D D. Valid Sets
  5. MFC 基础知识:主对话框与子对话框(一)
  6. 完整opencv(emgucv)人脸、检测、采集、识别、匹配、对比
  7. day05 selenium库的基础使用
  8. POJ 1651 Multiplication Puzzle(类似矩阵连乘 区间dp)
  9. python三方库之BeautifuSoup
  10. 曝Redmi Note 9系列下周发布:最便宜的一亿像素手机
  11. 【赠书活动】赠送清华社的《好好学Java:从零基础到项目实战》
  12. 华为京东联手,火拼小米生态链!
  13. jQ1.5中的事件系统(低版本的事件系统)
  14. 创业维艰,技术人创业如何少走弯路?
  15. python爬取大众点评字体_python采集大众点评(字体反爬)
  16. java压缩和解压ZIP和RAR文件踩坑实践
  17. 163邮箱手机收件服务器设置,网易邮箱全面默认开通IMAP 手机收信提速10倍
  18. python 自定义时间 加减天数
  19. wed是什么意思在计算机应用基础中,卡西欧wed什么意思
  20. Win32基础学习笔记

热门文章

  1. RN:调试工具Chrome、react-native-debugger、react-devtools、flipper对比
  2. 2015初三计算机考试题答案,2015初中生计算机考试年试题及答案.doc
  3. 订货软件-为什么要选择合适的订货软件
  4. vue空格填充 空格填充_什么是凭证填充? (以及如何保护自己)
  5. 百度算法都有那些,不知道的快来了解下吧
  6. 160W有桥PFC+LLC电源设计
  7. 利用邮件营销开发客户,打造个性化营销方案!
  8. [MoocPython课程]Turtlr库绘图之“富士山下”
  9. 最新最全的stardict词库文件.
  10. 学C++还是学Java?做软件研发还需掌握哪些知识和技能?