Python利用正则抓取网页内容保存到本地
admin
2023-07-31 01:46:31
0

目标是收集国内银行的域名列表,于是在人行的网站上找到了汇总信息,网址是http://www.cbrc.gov.cn/chinese/jrjg/index.html
截图是

查看一下他的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和银行名称提炼出来;最后将这些信息写入到文件中。
    注意一点,print到屏幕上时,需要将中文字符解码为utf-8才能打印,写入文件是不需要的。

    那么升级一下,我需要的不是url,而是银行对应的域名,可以用tld模块来提取
    import部分添加

    from tld import get_tld

    在使用tld模块从url提取域名的过程中,会发现莫名其妙的问题,不知道是提取正则提取Url时,url不规范导致的还是其他原因,总有一些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)

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

    相关内容

    热门资讯

    Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
    定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
    scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
    500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
    小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
    pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
    微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
    65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
    Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
    项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...