用Python写一个小的爬虫工具

事情是这样的,公司是用的第三方支付工具ping++,工作需要将他们文档中的银行编号和银行名称转成Json字符串放在本地使用。
具体链接在这:https://www.pingxx.com/api#银行编号说明
那么问题来了,对于这个银行编号表格,改怎么弄呢,总不能挨个复制吧。这样效率也太低了,不是一个程序猿的作风。于是我找ios同事要了一份他们解析好的json数据。。。哈哈哈。。就是这么简单粗暴。。要确实要了,但还是要自己弄一下,要善于将生活中可以写代码处理的事用代码去解决。
确定了要做什么事就好办了,首先想到的就是用Python爬虫去解析网页,然后分析数据处理。

组成爬虫的关键模块

  • URL管理器
    用于对需要爬取的URL和已经爬取过的URL进行管理,可以用set管理也可以用其他工具处理,这里只是对单个固定网页爬取,就用字符串代替了
  • HTML下载器
    将URL管理器中的对应的url的网页下载下来,存为字符串,然后可以将这个字符串传给网页解析器解析。这里用的是Python自带的urllib模块,在Python2.7 中该模块就是有名的urllib2,Python3.0中将urllib2 统一放到urllib.request下,使用方法略有不同,自行google
  • HTML解析器
    一方面会解析出有价值的数据,另一方面,由于每一个页面都有很多指向其它页面的网页,这些URL被解析出来之后,可以补充进URL管理器,以备之后爬取。这里用的第三方模块BeautifulSoup,需要安装,安装方法如下:
$ easy_install beautifulsoup4

或者

pip install beautifulsoup4

下载网页

import urllib.request

response = urllib.request.urlopen("https://www.pingxx.com/api#银行编号说明")
print(response.read())

没错就需要两行代码就可以下载一个网页,其实一行也可以

解析网页

上面下的网页就是一个html的源码,要解析它,BeautifulSoup支持多种方式的解析,获取自己想要的数据。这里就需要去网站看一看源码,我们可以使用Command+option+J 审查元素,来看一下我们需要数据处的源码的一些可用的地方,以方便爬取,下图使我们定位到的源码

Paste_Image.png

查看之后,分析需要的数据在那个div下的table里,我们需要获取table,然后解析table就可以了,但是div不太好直接拿到,但是有个

<h2 id="银行编号说明">银行编号说明</h2>

比较好拿,于是就先取他,再拿他的父节点的然后再取table
代码如下:

import urllib.request
from bs4 import BeautifulSoup

response = urllib.request.urlopen("https://www.pingxx.com/api#银行编号说明")
soup = BeautifulSoup(response, "html.parser")
table = soup.find("h2", id="银行编号说明").parent.find("table").find("tbody")

这样就获取到了table,剩下的就简单了,就是处理table了。先获取所有的tr,再获取每个tr中的td,然后获取需要td中的值进行拼接Json字符串。
完整代码如下:

import urllib.request
from bs4 import BeautifulSoup

response = urllib.request.urlopen("https://www.pingxx.com/api#银行编号说明")
soup = BeautifulSoup(response, "html.parser")
table = soup.find("h2", id="银行编号说明").parent.find("table").find("tbody")

bankJson = "["
for row in table.findAll('tr'):
    if len(row) > 2:
        cells = row.findAll('td')
        bank_code = cells[0].find(text=True)
        bank_name = cells[1].find(text=True)
        bankJson = bankJson + "{" + "\"code\":\"" + bank_code + "\"," + "\"name\":\"" + bank_name + "\"},"

bankJson = bankJson[0:len(bankJson) - 1] + "]"
print(bankJson)

运行代码就获取到打印的结果:

[{"code":"0100","name":"中国邮政储蓄银行"},{"code":"0102","name":"工商银行"},{"code":"0103","name":"农业银行"},{"code":"0104","name":"中国银行"},{"code":"0105","name":"建设银行"},{"code":"0301","name":"交通银行"},{"code":"0302","name":"中信银行"},{"code":"0303","name":"光大银行"},{"code":"0304","name":"华夏银行"},{"code":"0305","name":"民生银行"},{"code":"0306","name":"广发银行"},{"code":"0308","name":"招商银行"},{"code":"0309","name":"兴业银行"},{"code":"0310","name":"浦发银行"},{"code":"0311","name":"恒丰银行"},{"code":"0313","name":"临沂市商业银行"},{"code":"0316","name":"浙商银行"},{"code":"0317","name":"渤海银行"},{"code":"0318","name":"平安银行"},{"code":"0328","name":"新韩银行(中国)"},{"code":"0329","name":"韩亚银行(中国)"},{"code":"0336","name":"企业银行"},{"code":"0401","name":"上海银行"},{"code":"0402","name":"厦门银行"},{"code":"0403","name":"北京银行"},{"code":"0404","name":"烟台市商业银行"},{"code":"0405","name":"福建海峡银行"},{"code":"0406","name":"吉林银行"},{"code":"0408","name":"宁波银行"},{"code":"0412","name":"温州银行"},{"code":"0413","name":"广州银行"},{"code":"0414","name":"汉口银行"},{"code":"0418","name":"洛阳银行"},{"code":"0420","name":"大连银行"},{"code":"0422","name":"河北银行"},{"code":"0423","name":"杭州商业银行"},{"code":"0424","name":"南京银行"},{"code":"0427","name":"乌鲁木齐市商业银行"},{"code":"0428","name":"绍兴银行"},{"code":"0433","name":"葫芦岛市商业银行"},{"code":"0434","name":"天津银行"},{"code":"0435","name":"郑州银行"},{"code":"0436","name":"宁夏银行"},{"code":"0438","name":"齐商银行"},{"code":"0439","name":"锦州银行"},{"code":"0440","name":"徽商银行"},{"code":"0441","name":"重庆银行"},{"code":"0442","name":"哈尔滨银行"},{"code":"0443","name":"贵阳银行"},{"code":"0447","name":"兰州银行"},{"code":"0448","name":"南昌银行"},{"code":"0449","name":"晋商银行"},{"code":"0450","name":"青岛银行"},{"code":"0455","name":"日照市商业银行"},{"code":"0456","name":"鞍山银行"},{"code":"0458","name":"青海银行"},{"code":"0459","name":"台州银行"},{"code":"0461","name":"长沙银行"},{"code":"0463","name":"赣州银行"},{"code":"0465","name":"营口银行"},{"code":"0467","name":"阜新银行"},{"code":"0474","name":"内蒙古银行"},{"code":"0475","name":"湖州市商业银行"},{"code":"0476","name":"沧州银行"},{"code":"0479","name":"包商银行"},{"code":"0481","name":"威海商业银行"},{"code":"0483","name":"攀枝花市商业银行"},{"code":"0485","name":"绵阳市商业银行"},{"code":"0490","name":"张家口市商业银行"},{"code":"0492","name":"龙江银行"},{"code":"0495","name":"柳州银行"},{"code":"0497","name":"莱商银行"},{"code":"0498","name":"德阳银行"},{"code":"0503","name":"晋城银行"},{"code":"0505","name":"东莞商行"},{"code":"0508","name":"江苏银行"},{"code":"0513","name":"承德市商业银行"},{"code":"0515","name":"德州银行"},{"code":"0517","name":"邯郸市商业银行"},{"code":"0525","name":"浙江民泰商业银行"},{"code":"0526","name":"上饶市商业银行"},{"code":"0527","name":"东营银行"},{"code":"0528","name":"泰安市商业银行"},{"code":"0530","name":"浙江稠州商业银行"},{"code":"0534","name":"鄂尔多斯银行"},{"code":"0537","name":"济宁银行"},{"code":"0547","name":"昆仑银行"},{"code":"0554","name":"邢台银行"},{"code":"0556","name":"漯河商行"},{"code":"1401","name":"上海农商银行"},{"code":"1402","name":"昆山农信社"},{"code":"1403","name":"常熟市农村商业银行"},{"code":"1404","name":"深圳农村商业银行"},{"code":"1405","name":"广州农村商业银行"},{"code":"1408","name":"佛山顺德农村商业银行"},{"code":"1409","name":"昆明农村信用社联合社"},{"code":"1410","name":"湖北农信社"},{"code":"1415","name":"东莞农村商业银行"},{"code":"1416","name":"张家港农村商业银行"},{"code":"1417","name":"福建省农村信用社联合社"},{"code":"1418","name":"北京农村商业银行"},{"code":"1419","name":"天津农村商业银行"},{"code":"1420","name":"宁波鄞州农村合作银行"},{"code":"1424","name":"江苏省农村信用社联合社"},{"code":"1428","name":"江苏吴江农村商业银行"},{"code":"1430","name":"苏州银行"},{"code":"1443","name":"广西农村信用社联合社"},{"code":"1446","name":"黄河农村商业银行"},{"code":"1447","name":"安徽省农村信用社联合社"},{"code":"1448","name":"海南省农村信用社联合社"},{"code":"1513","name":"重庆农村商业银行"},{"code":"6462","name":"潍坊市商业银行"},{"code":"6466","name":"富滇银行"},{"code":"6473","name":"浙江泰隆商业银行"},{"code":"6478","name":"广西北部湾银行"},{"code":"6567","name":"商丘商行"}]

好了,问题解决了,说实话第一次写代码去解决实际中的碰到的问题,挺好玩,带着要解决的问题去学习的效果会更好一些。感想就是在想学东西或者想做一些事情的时候,不要先想太多,比如把所有资料都准备齐、哪个人的资料好,怎么才能少走弯路,学不好做不好会怎么样,等等.....然后你的激情就没了,这件事也就不了了之了,这些都不好。我们要的就是想做什么立刻去做,just do it。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,988评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,612评论 18 399
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 26,482评论 5 19
  • 人的一生有悲欢离合,喜怒哀乐,酸甜苦辣,辗转即逝,面临各种问题时应该坦然面对,但却事与愿违,所以我们应该学会自己自...
    开心百分百阅读 161评论 0 1
  • 现在在坐公车,我给自己定个目标,就是下车前要写点东西出来。刚刚看了咪蒙的《如果回到十年前,你想改变什么?》看完后,...
    陳林健阅读 243评论 0 0