php 正则 抓取网页(国内银行域名列表之第一个版本如下:提炼一下的 )
优采云 发布时间: 2021-10-13 12:34php 正则 抓取网页(国内银行域名列表之第一个版本如下:提炼一下的
)
目的是采集国内银行的域名列表,所以在中国人民银行的网站上找到了汇总信息。网址是
截图是
查看他的html源码,需要抓包的部分是:
中国工商银行
中国农业银行
细化一下,我们需要提取的是Url和银行名称,然后可以先把源码中的t删掉,再用正则表达式匹配
\r\n(.*)\r\n
分析完毕,下面是代码实现,第一个版本如下:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import os,re
import mechanize
browser = mechanize.Browser()
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
res = browser.open('http://www.cbrc.gov.cn/chinese/jrjg/index.html')
data = res.read()
data = data.replace('\t','')
regx = '\r\n(.*)\r\n'
domainlist = re.findall(regx,data)
print len(domainlist)
for domain in domainlist:
print domain[1].decode('utf-8'), domain[0]
with open(u'金融.txt','wb') as fp:
str1 = ''
for domain in domainlist:
str1 += domain[1]+ '----' + domain[0] + '----'+ '\r\n'
fp.write(str1)
首先声明一个浏览器对象,修改其http头中的user-agent信息;然后打开Url,获取Html源码,删除't';然后使用Python的正则匹配来细化Url和银行名Out;最后将这些信息写入文件中。
注意打印到屏幕时,汉字需要解码成utf-8才能打印,不需要写入文件。
然后升级,我需要的不是url,而是银行对应的域名,可以用tld模块提取
添加了导入部分
from tld import get_tld
在使用tld模块从URL中提取域名的过程中,我们会发现莫名其妙的问题。不知道是不是提取正规网址的时候网址不正规造成的,还是其他原因。总有一些网址不能提取域名,所以会在出现错误提示时,我这里改写了,增加容错性
def my_get_tld(url):
try:
str = get_tld(url = url,fail_silently=True)
if str == None:
return ''
else:
return str.encode('utf8')
except:
return ''
所以写文字的代码修改为
with open(u'金融.txt','wb') as fp:
str1 = ''
for domain in domainlist:
str1 += domain[1]+ '----' + domain[0] + '----' + my_get_tld(url = domain[0]) + '\r\n'
fp.write(str1)
好的,运行后就可以得到需要的内容了