用Python获取银行网站上的存贷款利率表Word文件下载.docx
《用Python获取银行网站上的存贷款利率表Word文件下载.docx》由会员分享,可在线阅读,更多相关《用Python获取银行网站上的存贷款利率表Word文件下载.docx(4页珍藏版)》请在冰豆网上搜索。
这绝对是是对Junior耐心、眼力的一个考验这种没有什么附加值、重复性很强的工作,对于新人成长并没有什么帮助。
但是怎么才能让这种无聊的工作自动化呢?
LifeIsShort,UsePython
这时候我们就要引出简单、易学、功能强大的编程语言Python了。
我就在这里不赘述Python的优点了,只放一个一目了然的编程语言比较图:
需求分析
在这项任务中,我们需要的自动化的过程并不多,只需要遍历各大银行主页,搜索到存贷款页面连接并打印或储存下来即可。
我们当然也可以直接将数据直接也爬取下来存在Excel中,但因为各家银行网站架构设计各异,有些存贷款利率表甚至只是一张图片,页面分析的过程会比较耗时。
所以,我们暂时不将数据爬取转存这项功能放入我们的需求清单中。
爬取过程
首先,我们先找到一个银行网址导航网站。
我选取的是360导航页面(
并查看源代码:
可以看出,银行网址都被放入了a这个标签中。
我们可以使用第三方库BeautifulSoup美丽汤对该标签进行下载。
当然,不只是银行网址被放入了这个标签中,还有其他很多不相关的网站也是被放入了这个标签下。
这时候我们就需要正则表达式对于该标签下的链接进行筛选。
经过观察,大部分银行网站的标签名都以“银行”结尾,所以我们使用
.银行
作为筛选的正则。
而在银行页面上,存贷款的利率信息表的标签名,一般都会包含”款利率“这几个字,所以我们使用:
”款利率.*
作为寻找存贷款利率链接的正则。
下面是准备阶段的Python代码:
#encoding:
utf-8
importurllib2
importre
frombs4importBeautifulSoup
#建立列表储存url和对应的标签名
url=[]
name=[]
#建立集合,将爬取过的页面放入,避免才重复
urlset=set("
"
)
#用于筛选的正则表达式
source="
.银行"
temp=source.decode('
utf8'
source2="
款利率.*"
temp2=source2.decode('
#导航网站作为我们爬取的根页面
response=urllib2.urlopen("
html=response.read()
soup=BeautifulSoup(html,'
html.parser'
#将满足条件的url和页面名称放入列表中
fortaginsoup.find_all(name='
a'
text=pile(temp)):
name.append(tag.string)
url.append(tag.get('
href'
))
我们在获取好各大银行网站的url后,我们需要进一步进入银行的存贷款利率信息表页面。
但是经过进一步分析,我们发现,第二层的url一般都是短链接:
无法直接使用,所以我们需要将短链接与域名进行拼接:
#域名拼接
url2=link+tag2.get('
而如果第二层链接是可以直接访问的连接,这样拼接会导致访问错误,所以我们将连接转换为String,通过判断其前四个Char是否为http来判断该连接为长连接还是短链接:
ifhref[0:
4]=='
http'
:
#长连接,不进行域名拼接
url2=tag2.get('
并在每次拼接后查询该连接是否输出过,如果已经输出过,则通过continue跳过循环。
如果没有,则输出后加入urlset集合中:
ifurl2inurlset:
continue
else:
urlset.add(url2)
Python输出部分代码:
num=-1
forlinkinurl:
num=num+1
try:
linkresponse=urllib2.urlopen(link)
htmlpage=linkresponse.read()
pagesoup=BeautifulSoup(htmlpage,'
fortag2inpagesoup.find_all(name='
text=pile(temp2)):
#得到银行名称
bname=tag2.get_text()
#得到页面名称
href=str(tag2.get('
ifhref[0:
ifurl2inurlset:
#输出过,跳出循环
else:
#未输出过,放入集合
#域名拼接
url2=link+tag2.get('
printname[num]+"
"
+bname+"
+url2
except:
pass