import socket
import re
'''
广东省公安厅出入境政务服务网护照,通行证办理进度查询。
分析网址格式为 http://www.gdcrj.com/wsyw/tcustomer/tcustomer.do?&method=find&applyid=身份证号码
构造socket请求网页html,利用正则匹配出查询结果
'''
def gethtmlbyidentityid(identityid):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'www.gdcrj.com';
suburl = '/wsyw/tcustomer/tcustomer.do?&method=find&applyid={0}'
port = 80;
remote_ip = socket.gethostbyname(host)
s.connect((remote_ip , port))
print('【INFO】:socket连接成功')
message = 'GET '+ suburl.format(identityid) +' HTTP/1.1\r\nHost: '+ host +'\r\n\r\n'
# str 2 bytes
m_bytes = message.encode('utf-8')
# send bytes
s.sendall(m_bytes)
print('【INFO】:远程下载中...')
recevstr = ''
while True:
# return bytes
recev = s.recv(4096)
# bytes 2 str
recevstr += recev.decode(encoding = 'utf-8', errors = 'ignore')
if not recev:
s.close()
print('【INFO】:远程下载网页完成')
break
return recevstr
'''
利用正则表达式从上步获取的网页html内容里找出查询结果
'''
def getresultfromhtml(htmlstr):
linebreaks = re.compile(r'\n\s*')
space = re.compile('( )+')
resultReg = re.compile(r'\
([^ | ', re.MULTILINE)
#去除换行符和空格 htmlstr = linebreaks.sub('', htmlstr) htmlstr = space.sub(' ', htmlstr)
#匹配出查询结果 result = resultReg.findall(htmlstr) for res in result: print(res.strip())
if __name__ == '__main__': identityid = input('输入您的身份证号码(仅限广东省居民查询):') try: identityid = int(identityid) print('【INFO】:开始查询') html = gethtmlbyidentityid(identityid) getresultfromhtml(html) print('【INFO】:查询成功') except: print('【WARN】:输入非法')
input('【INFO】:按任意键退出')
推荐阅读
-
探讨如何利用Electron框架,通过拖动HTML元素(如音乐列表项)到桌面来实现本地文件的复制。 ...
[详细]
蜡笔小新 2024-12-19 09:14:47
-
3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ...
[详细]
蜡笔小新 2024-12-19 09:10:33
-
-
本文介绍了如何利用Java中的URLConnection类来实现基本的网络爬虫功能,包括向目标网站发送请求、接收HTML响应、解析HTML以提取所需信息,并处理可能存在的递归爬取需求。 ...
[详细]
蜡笔小新 2024-12-18 19:40:22
-
Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ...
[详细]
蜡笔小新 2024-12-18 19:30:51
-
本文详细介绍了Java集合框架中的Collection体系,包括集合的基本概念及其与数组的区别。同时,深入探讨了Comparable和Comparator接口的区别,并分析了各种集合类的底层数据结构。最后,提供了如何根据需求选择合适的集合类的指导。 ...
[详细]
蜡笔小新 2024-12-18 18:29:09
-
本文探讨了在网页设计中,如何有效解决input checkbox与label文字不对齐的问题。通过具体的代码实例和解决方案,帮助开发者实现更加美观的用户界面。 ...
[详细]
蜡笔小新 2024-12-18 18:27:39
-
本文介绍了如何通过ARM编译器组件重定向标准C运行时库的I/O函数,以适应不同的硬件平台。原文链接:https://www.keil.com/pack/doc/compiler/RetargetIO/html/retarget_overview.html ...
[详细]
蜡笔小新 2024-12-18 18:17:56
-
本文介绍了一种使用HTML和JavaScript实现的左右可点击滑动导航菜单的方法,适用于需要展示多个链接或项目的网页布局。 ...
[详细]
蜡笔小新 2024-12-18 17:56:15
-
本文详细介绍如何在 Windows 环境下安装 Ubuntu 12.04 版本的 Linux 操作系统,包括必要的软件下载、配置步骤以及注意事项。 ...
[详细]
蜡笔小新 2024-12-18 17:51:59
-
本文深入探讨了JavaScript中循环结构的使用方法,特别是While循环,用于重复执行一段代码直到特定条件不再满足。同时,文章还介绍了Switch语句在多条件分支选择中的应用。 ...
[详细]
蜡笔小新 2024-12-18 17:41:32
-
随着技术社区的发展,越来越多的技术爱好者选择通过撰写博客来分享自己的学习经验和项目进展。本文将介绍一个具体案例,即将一套原本运行于Windows平台的代码成功移植到Linux(Redhat)环境下的过程与挑战。 ...
[详细]
蜡笔小新 2024-12-18 17:25:07
-
本文详细探讨了Internet组管理协议(IGMP)的不同版本,包括IGMPv1的基础功能、IGMPv2的增强特性和IGMPv3的重要改进。特别分析了IGMPv3如何支持特定源组播(SSM)模型,并介绍了各版本之间的主要差异。 ...
[详细]
蜡笔小新 2024-12-18 17:22:44
-
本文内容来自ADI的技术文章,作者:DelJones原网址为:https:www.analog.comcnanalog-dialoguea ...
[详细]
蜡笔小新 2024-12-18 17:21:20
-
本文详细介绍了如何在Windows Server 2008 R2操作系统上通过IIS配置FTP服务的过程,包括服务器角色的选择与安装、FTP站点的创建以及必要的服务和防火墙设置检查。 ...
[详细]
蜡笔小新 2024-12-18 15:40:25
-
本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ...
[详细]
蜡笔小新 2024-12-18 15:27:52
-
|