python爬虫--根据身份证号码获取户籍地、出生年月等信息

article/2025/9/28 7:35:27

一、背景

工作中偶尔会遇到这样的情况,给你一堆客户身份证号码,然后要你把对应的性别、生日、户籍地等信息弄出来。

最常用的方法就是用excel表套公式,这个方式如果用来取性别、生日这些信息的话问题不大,毕竟这些规则还好梳理,但是如果想要弄户籍地(如:广东省 广州市 荔湾区),操作难度极大。首先,你要弄到相应的行政区划代码,如广东省广州市天河区是440106,要注意,这些区划代码因为行政区划的调整,是有很多变化的,而且还是时时调整的,反正让我去收集这么一个表出来,我是做不到了。

由于以上原因,我只能另想其他办法了。

后来发现有这么一个网站:http://qq.ip138.com/idsearch/index.asp?userid=&action=idcard 。你在这个网站上输入身份证号码,它就会给你把性别、生日、户籍地给你弄出来。

看到这个网站就想,如果能让代码把身份证号码一个一个到网站上遍历一遍,然后把这些信息扒下来不就行了??

说干就干!

 二、代码部分

这里用到的是python,整体的思路:

1、把要处理的身份证读入

2、设置循环,一个一个获取身份证号码对应的信息

3、分析页面的html,把目标信息取出

4、把获取的信息打包,输出成一个excel文件

第一步,读入身份证号码很简单,用pandas的read_csv读入即可,这里以txt文件为例,格式如下:

代码如下(如果是.xlsx或.csv文件,同样处理即可)

import pandas as pddf = pd.read_csv('E:/SFZ.txt', sep='\t', header=None, dtype=str, na_filter=False)

 第二步,设置循环很简单,关键是怎么才能做到每次查询对应的身份证号码信息。常规套路,先看一下网址url,上图的url是:http://qq.ip138.com/idsearch/index.asp?userid=440103198007314832&action=idcard,细细一看发现要查询的身份证号码也在url中(其实很多网页都会把输入的查询内容整到url上),大胆猜想一下,是不是url就是由三部分组成:"http://qq.ip138.com/idsearch/index.asp?userid="+身份证号码+"&action=idcard"  。多拿几个号码输入测试一下,没问题。(有时如果没有规律可循,一定要一个一个输入值,可以用selenium,每次自动将身份证号码键入即可)

接下就很简单了,写个for循环,每次根据身份证号码组成一个新的url,完成。

第三步,解析网页目标信息,用select、find、xpath都行,这里用select举例,详细用法可点连接查看,不赘述

#解析网页
res = requests.get(url)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'lxml')#将网页中咱们需要的信息所有在的模块切出来
mainpart = soup.select('div[class="bd"] tbody tr')#将信息取出并存入list中
if len(mainpart)>4:sex = mainpart[1].text.split('性别')[1]birthday = mainpart[2].text.split('出生日期')[1]address = mainpart[4].text.split('发证地')[1]
else:continue

第四步,打包数据用pandas的to_excel即可,代码如下:

#打包数据
data=pd.DataFrame({'idcard':idcard,'sex':sex1,'birthday':birthday1,'address':address1})
print (data)#打印出来瞄一眼#将数据输出成一个excel文件
pd.DataFrame.to_excel(data,"E:\\person_card.xlsx",header=True,encoding='gbk',index=False)

完整代码在这里!完整代码在这里!完整代码在这里!

#把需要用到的库一股脑import进来
import importlib,sys
importlib.reload(sys)
import time
import requests
from lxml import etree
from bs4 import BeautifulSoup
time1=time.time() #定义个时间,为了后面可以记录一下代码执行的时长
import pandas as pd#先将存有身份证号码信息的txt文件读取进来
df = pd.read_csv('E:/SFZ.txt', sep='\t', header=None, dtype=str, na_filter=False)#定义接下来存储身份证号码、性别、生日、户籍地信息的4个list
idcard =[]
sex1 = []
birthday1 = []
address1 = []#看一下读取进来的一共有多少个身份证号码
length=len(df)
print(length)#通过循环,依次将每个身份证号码对应的信息获取
for i in range(0,length):#多一个try,防止某个号码出差自己中止代码执行try:#print (df.iloc[i,0])#url="http://qq.ip138.com/idsearch/index.asp?action=idcard&userid="+df.iloc[i,0]+"&B1=%B2%E9+%D1%AF"#上面的url规则是2018年年底写的,结果到了2019年网址格式就又改了,苦逼地改一下#查看身份证查询网页的网址,发现规律,按照规律组成urlurl="http://qq.ip138.com/idsearch/index.asp?userid="+df.iloc[i,0]+"&action=idcard"    #解析网页res = requests.get(url)res.encoding = 'utf-8'soup = BeautifulSoup(res.text,'lxml')#将网页中咱们需要的信息所有在的模块切出来mainpart = soup.select('div[class="bd"] tbody tr')#将信息取出并存入list中if len(mainpart)>4:sex = mainpart[1].text.split('性别')[1]birthday = mainpart[2].text.split('出生日期')[1]address = mainpart[4].text.split('发证地')[1]idcard.append(df.iloc[i,0])sex1.append(sex)birthday1.append(birthday)address1.append(address)else:continueexcept Exception as e:print (Exception, ":", e)#打包数据
data=pd.DataFrame({'idcard':idcard,'sex':sex1,'birthday':birthday1,'address':address1})
print (data)#打印出来瞄一眼#将数据输出成一个excel文件
pd.DataFrame.to_excel(data,"E:\\person_card.xlsx",header=True,encoding='gbk',index=False)time2=time.time()
print (u'ok,爬虫结束!')
print (u'总共耗时:'+str(time2-time1)+'s')

执行结果如下:


http://chatgpt.dhexx.cn/article/AmerHPJy.shtml

相关文章

BP算法的身份证号码识别

摘 要:基于反向传播算法的多层前馈网络(简称BP神经网络)在图像处理方面应用较为广泛。目前,身份证号码识别技术 在图像识别领域迅猛发展,为提高识别身份证号码的速度及准确性,本文研究一种基于BP神经网络的身份证号码识别系统。首 先&#xf…

Matlab实现身份证号码快速识别

用Matlab 实现身份证号码快速识别 摘 要: 探讨身份证号码的快速识别。 首先从身份证图像中获取 0~9 共 10 个号码数字的样本图像, 从中提取其空间分布特征和结构特征; 再从待识别的身份证图像中提取各号码数字的空间分布特征和结构…

身份证号码的编码规则及校验

前言 本文内容适用于二代身份证,如无特殊说明,本文中所说的身份证皆指二代身份证。 笔者目前使用的jdk版本是1.6.0_29,Eclipse版本是Juno Release,Build id 20120614-1722。如无特殊说明,本文所有的Java代码都是基于…

基于Python实现身份证号码验证

基于Python实现身份证号码验证 摘要: 该设计主要使用python语言来实现身份证号验证程序。它运用 tkinter模块生成GUI界面。当用户输入身份证号,按下检查按钮,即可判断身份证号是否正确。该程序简洁,灵活,执行效率高。 关键词: 身…

java验证身份证号码的合格性

中国居民身份证校验码算法步骤如下: 将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为: 7-9-10-5-8-4-2-1-6-3-7-9&…

Python+Opencv身份证号码区域提取及识别

前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出。现在实训结束了将代码发布出来供大家参考,识别的方式…

身份证号码案例

我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最…

Python之身份证号码的校验

该文章已同步收录到我的博客网站,欢迎浏览我的博客网站,xhang’s blog 问题描述: 中华人民共和国居民身份证号码由17 位数字和1位校验码组成。 其中,前6位为所在地编号,第7~14 位为出生年月日,第15~17位为登…

JAVA 身份证号码的验证

一、身份证结构和形式 在通用的身份证号码有15位的和18位的; 15位身份证号码各位的含义: 1、1-2位省、自治区、直辖市代码; 2、3-4位地级市、盟、自治州代码; 3、5-6位县、县级市、区代码; 4、7-12位出生年月日,比如670401代…

等价类划分测试—身份证

目录 0.题目要求: 注意:一个测试用例只能覆盖一个无效等价类,但可以覆盖尽可能多的前面未覆盖到的有效等价类。 1.划分等价类 1.1有效等价类 1.2无效等价类 2.测试用例: 0.题目要求: 针对国内18位身份证号码验证…

二维码文件分析

将二维码保存,进行解码 进行base64解码,网址:https://www.sojson.com/base64.html。第一次解码:6LZ5Liq5bCx5piv6aqM6KB56CB77yaQkozNVVCNVNZNg 第二次解码:这个就是验证码:BJ35UB5SY6 得到key

Base64[再谈Base64] -- 附练习源代码

我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了。如果您对二进制数有所了解,你就可以开始读它了。 打开一封Email,查看其原始信息(您可以通过收取、导出该邮件用文…

KgoUI(3) 之 vue + Sass

框架源代码:码云 直接上步骤: 第一:sass需要的模块 (没有安装cnpm 就用 npm咯) cnpm install --save-dev sass-loader cnpm install --save-dev node-sass cnpm install --save-dev sass-resources-loader…

安卓项目实战之强大的网络请求框架okGo使用详解(四):Cookie的管理

Cookie概念相关 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制是需要借助于cookie机制来…

Windows下安装Ginkgo测试框架

终端执行命令 #切换至GO安装路径 cd F:\Go\goProject\src\github.com F:#安装Ginkgo及其附加库 go get github.com/onsi/ginkgo/ginkgo go get github.com/onsi/gomega结果安装其附加库时开始报错 package golang.org/x/net/html/charset: unrecognized import path "g…

HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.

python 下载第三方库的时候一直报错怎么办, pip --default-timeout1000 install -U pip 尝试了延时操作依然不行,不能获取 这种情况有可能是你开了VPN或者是其他的软件,退出下载即可

Go:构建应用程序的10大框架

文章目录 简介一、CLI 命令(spf13/cobra)二、配置读取器(spf13/viper)三、Web 框架(labstack/echo)四、依赖注入(uber-go/fx)五、Swagger Generator, UI 和 Validation1. Swagger generator (swaggo/swag)2. Swagger UI (swaggo/echo-swagger)3. Swagger validation (go-swagge…

KgoUI(2) 之 vue + layui

框架源代码:码云 我接触layui 已经快2年多了(Layui刚出的时候我就开始关注了),vue 和 layui并不是天生一对,elementui 和vue配合更加亲密无间。我认为layui的弹层layer是当前前端最好的弹层。 这里依旧选择layu…

2021年全国大学生网络安全邀请赛暨第七届“东华杯“上海市大学生网络安全大赛Writeup

2021年全国大学生网络安全邀请赛暨第七届"东华杯"上海市大学网格全大赛Writeup Misc checkin 题目给了AGYAbABhAGcAewBkAGgAYgBfADcAdABoAH0- 是UTF-7编码,解码得到flag flag为: flag{dhb_7th}project 下载附件,解压之后发现这…