php 正则 抓取网页(国内银行域名列表之第一个版本如下:提炼一下的 )

优采云 发布时间: 2021-10-13 12:34

  php 正则 抓取网页(国内银行域名列表之第一个版本如下:提炼一下的

)

  目的是采集国内银行的域名列表,所以在中国人民银行的网站上找到了汇总信息。网址是

  截图是

  

  查看他的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)

  好的,运行后就可以得到需要的内容了

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线