黑帽联盟

 找回密码
 会员注册
查看: 1331|回复: 0
打印 上一主题 下一主题

[其它] Python利用正则抓取网页内容保存到本地

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

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

    查看一下他的html源码,需要抓取部分的是:

    1. <li
    2.                                                     style="margin: 0px 10px 0px 5px; width: 120px; float: left; height: 30px; display: inline;">
    3.                                                     <a  target="_blank"  style="color:#08619D">
    4.                                                                                                             中国工商银行
    5.                                                                                                          </a>
    6.                                                 </li>
    7.                                                                                                                                                                                                                                                        <li
    8.                                                     style="margin: 0px 10px 0px 5px; width: 120px; float: left; height: 30px; display: inline;">
    9.                                                     <a  target="_blank"  style="color:#08619D">
    10.                                                                                                             中国农业银行
    11.                                                                                                          </a>
    12.                                                 </li>
    复制代码
    提炼一下,我们需要提取的是Url和银行的名称,那么可以先把源码中的t删除,然后用正则表达式匹配

    <a href="(.*)" target="_blank" style="color:#08619D">\r\n(.*)\r\n</a>

    分析完毕,下面是代码实现了,第一个版本如下:

    游客,如果您要查看本帖隐藏内容请回复


    首先声明一个浏览器对象,并修改了其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,运行之后就可以得到需要的内容了

    python批量抓取内容
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部