这个程序是最初学Beautiful Soup时,写的一个程序。
因为相对以前的正则什么的,获取一组数据还是有点麻烦的,这边分割,那边分割。程序代码也没有那么简单直观。
如图,是我们今天要获取数据的网页

本次我们用到的的库(不是python 自带的库)有BeautifulSoup && pymysql
这两个库安装很方便,配置好了pip环境后,直接输入命令 pip install BeautifulSoup4 安装BeautifulSoup库;输入pip install PyMySQL安装pymysql。库名不区分大小写。
使用BeautifulSoup时,需要查询元素位置,怎么做到呢?
以谷歌浏览器为例,按 F12键(快捷键:Ctrl + shift + C),可审核元素。
代码中使用:bsobjs = bsobj.findAll(“tr”,{“bgcolor”:”#FFFFFF”})
tr:是一个tag,即标签名
bgcolor:是一个key,即tr里面的一个键
‘#FFFFFF’:是一个value,即bgcolor对应的值
具体怎么使用BeautifulSoup可百度一下,轻松解决。
使用pymysql一是为了数据便于重复利用,二是那会刚学习pymysql,就顺便用上了。使用数据库时候,不管正常情况下,异常情况下都要确保程序不用时,关闭连接。
下面直接上代码:

# coding=utf-8import urllib.request
from bs4 import BeautifulSoup
from urllib.error import HTTPError
import pymysql
import timedef getHtml(url):"""获取指定url下的数据,若获取数据成功,返回数据结果;若失败返回 None"""try:req = urllib.request.Request(url) #发起请求req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \(KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36") #添加浏览器头文件html = urllib.request.urlopen(req) #time.sleep(0.5)return htmlexcept HTTPError as e: #捕获异常print("HTTPError:"+str(e))return Noneexcept Exception as e: #捕获异常print("Exception:"+str(e))return Nonedef connectMysql(database="shenfenzheng"):"""连接数据库,若数据库连接正常,返回数据库连接对象;若数据库连接异常,捕获异常,返回 None"""host = "localhost" #数据库地址user = "root" #数据库用户名passward = "123456" #数据库密码database = database #数据库名charset = "utf8" #数据库编码try:#连接数据库,并返回数据库连接对象return pymysql.connect(host=host, user=user, passwd=passward, database=database, charset=charset)except Exception as e: #捕获异常print("Database connect Error:"+str(e))return NoneURL = "http://shenfenzheng.293.net/" #获取身份证数据等信息的网址
sum = 0
#数据库与游标对象理解,一家店有很多员工,一个数据库连接相当于一个连接,一个员工相当于一个游标对象;
#一家店可以有多名员工,一个员工同一时间只能做一件事;同样一个数据库连接可以有多个游标对象,
#但是一个游标对象在同一时间只能做一件事,所以在多线程的时候可以只连接数据库一次,但创建多个游标对象。
conn = connectMysql() #连接数据库
cur = conn.cursor() #创建游标对象
while conn:html = getHtml(URL) #获取网页信息bsobj = BeautifulSoup(html) #创建BeautifulSoup对象bsobjs = bsobj.findAll("tr",{"bgcolor":"#FFFFFF"}) #获取'tr'标签下,所有'bgcolor'的值是'#FFFFFF'的对象信息for bsobj in bsobjs:bsobj = bsobj.findAll("td") #获取第一个'tr'标签下,'bgcolor'的值是'#FFFFFF',所有含有'td'标签的信息nameAndIDCard = bsobj[0].get_text() #获取第一个'td'对象信息,本处指姓名与身份证print("nameAndIDCard:"+nameAndIDCard) #查看姓名及身份证信息nameAndIDCard = str(nameAndIDCard).split(" ") #分割姓名与身份证信息name = nameAndIDCard[0] #姓名idCard = nameAndIDCard[1] #身份证gender = bsobj[1].get_text() #获取第二个'td'对象信息,本处指性别print("gender:"+gender) #查看性别age = bsobj[2].get_text() #获取第二个'td'对象信息,本处指年龄print("age:"+age) #查看年龄address = bsobj[3].get_text() #获取第三个'td'对象信息,本处指所属地区print("address:"+address) #查看所属地区print("sum:",sum)try:cur.execute("insert into id_card(name,id_card,gender,age,address) value(%s,%s,%s,%s,%s)",(name,idCard,gender,age,address)) #插入姓名,身份证,性别,年龄,所属地区信息到数据库conn.commit() #提交执行上述sql语句except Exception as e: #若插入数据到数据库有问题(eg:字段长度问题等),捕获异常print("Add data to database Error:"+str(e))sum += 1if sum >= 300: #如果插入数据达到300条,结束程序cur.close() #用完后一定关闭,不关闭,会占用资源。就像打开文件,用完后需要关闭一样。conn.close() #数据库连接用完后也要关闭连接,不然连接多了,没有释放,数据库会连接不上。一般mysql默认安装的话 是15个用户同时连接。break

BeautifulSoup 元素:

代码执行情况:

数据库插入数据情况:

从shenfenzheng网站获取身份证号码等信息相关推荐

  1. python实现获取身份证号码的方法

    记录瞬间 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 2.地址码 表示编 ...

  2. Opencv获取身份证号码区域

    记得应该是16年的时候,从一个公开课看到了关于OCR方面的内容,里面讲到了通过OpenCV对身份证号码区域的剪裁以及使用Tess-Two进行文字识别,实现了对身份证号码的识别功能. 断断续续看了点关于 ...

  3. 用js实现自动获取身份证里面的信息

    输入身份证号:出生日期:性别: 输入身份证号:<input type="text" id="id" name="id" value=& ...

  4. 调用百度API,获取身份证上的信息

    1.先导入百度的API的依赖于项目中 <dependency><groupId>com.baidu.aip</groupId><artifactId>j ...

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

    一.背景 工作中偶尔会遇到这样的情况,给你一堆客户身份证号码,然后要你把对应的性别.生日.户籍地等信息弄出来. 最常用的方法就是用excel表套公式,这个方式如果用来取性别.生日这些信息的话问题不大, ...

  6. 上传身份证照片js_Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息...

    客户要求用身份证图片上传获取身份证的详细信息就下来研究了一下(现在的客户真的懒 身份证信息都懒得输入了哈哈...),经过慢慢研究,果然皇天不负有心人搞出来了.这个借助的是腾讯的一个SKD  腾讯优图云 ...

  7. Pandas提取文本信息(身份证号码)

    学校保卫处工作人员登记的内容不规范,想要提取其中的身份证号码,下面从文件读取及内容提取,到最后的数据保存,跟大家一起交流讨论. 表格内容: 登记内容 时间 小明的身份证是990326197312200 ...

  8. 雅客EXCEL(5)-tab键、同组数据录入、提取重复值、提取身份证号码的出生日期

    1.使用Tab键进行移动 使用TAB移动:写姓名.地址.电话号码.身份证号码,这四个栏目,根据这四个栏目填充数据,如果数据写到最后了,按下enter键,可以返回下一行的第一个,极其提高效率. 2.同组 ...

  9. JAVA 输入身份证号码进行验证正误,15位转18位,并解析出生日、当前年龄、地区代码、性别

    我们的身份证号码包含很多的信息,下面的代码提供了身份证的解析功能,具体看注释吧,已经写全了 import java.text.SimpleDateFormat; import java.util.Da ...

最新文章

  1. Spring Cloud Alibaba 升级改造:老项目升级到微服务的重构策略
  2. 学自动化必知:20个传感器原理及应用动图
  3. 软件测试技术学什么条件,软件测试从业者需要具备哪些技能
  4. qlineedit文本改变时_行文本编辑框QLineEdit及自动补全
  5. java-HashSet源码学习
  6. java第十三章总结
  7. 支付宝H5 与网页端支付开发
  8. stl源码剖析_STL源码剖析 阅读笔记(二)allocator
  9. go java gc_图解Golang的GC垃圾回收算法
  10. 【2017-12-12】Winform----Datagirdview使用
  11. [Ajax] jQuery中的Ajax -- 02-jQuery中的三级联动
  12. 【实践】多场景下的搜索词推荐算法及在腾讯的应用实践.pdf(附下载链接)
  13. 理解 position:relative 与 position:absolute
  14. 《转》阿里负责人揭秘面试潜规则
  15. Atitit 类库冲突 解决方案
  16. stardic字典文件
  17. 邮件在线编辑器-零基础制作精美图文并茂的HTML邮件不费力
  18. app开发,开发app的具体步骤来啦
  19. powerDesigner 反向生成mysql数据库库
  20. 什么是遥控灯开关:工作及其应用解析

热门文章

  1. 190822 CSP-S 2019 模拟
  2. numpy中的 numpy.c_ numpy.ravel numpy.mgrid的理解
  3. np.ndarray.ravel()
  4. 亲测有效,解决wireshark检测不到网卡的问题
  5. Eric Raymond对于几大开发语言的评价
  6. Linux/Centos 安装oracle报错“调用makefile '/oracle/produc
  7. [收藏]今年重庆高考作文满分
  8. 了解自己 做好自己
  9. 婚纱摄影师为4万报酬,泄露我国军事机密
  10. SGame 页面管理