当前位置: 首页 > news >正文

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

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

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

<li
                                                    style="margin: 0px 10px 0px 5px; width: 120px; float: left; height: 30px; display: inline;">
                                                    <a href="http://www.icbc.com.cn/" target="_blank"  style="color:#08619D">
                                                                                                            中国工商银行
                                                                                                         </a>
                                                </li>
                                                                                                                                                                                                                                                       <li
                                                    style="margin: 0px 10px 0px 5px; width: 120px; float: left; height: 30px; display: inline;">
                                                    <a href="http://www.abchina.com/" target="_blank"  style="color:#08619D">
                                                                                                            中国农业银行
                                                                                                         </a>
                                                </li>

提炼一下,我们需要提取的是Url和银行的名称,那么可以先把源码中的t删除,然后用正则表达式匹配

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

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

#!/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 = '<a href="(.*)" target="_blank" style="color:#08619D">\r\n(.*)\r\n</a>'
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,运行之后就可以得到需要的内容了

clipboard.png

相关文章:

  • 管理员页面
  • Spring Boot整合MyBatis
  • 1100名达摩院“扫地僧”加持,阿里云的下一个十年
  • 深入学习JVM了解JVM内存模型
  • I.MX6 AW-NB177NF p2p support
  • Vue Router
  • 【转】FPGA内部小数计算
  • LeetCode算法题-Non-decreasing Array(Java实现)
  • 我的IT转行之路
  • 读书笔记之《实战Java虚拟机》(6):性能监控工具
  • B-树(B+树) 学习总结
  • 【DAY24】内省,NIO的学习笔记
  • 双亲委派模型与Tomcat类加载架构
  • JavaScript事件详解
  • 明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看
  • Cookie 在前端中的实践
  • javascript 总结(常用工具类的封装)
  • leetcode-27. Remove Element
  • PHP 7 修改了什么呢 -- 2
  • ReactNative开发常用的三方模块
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 工作手记之html2canvas使用概述
  • 关于extract.autodesk.io的一些说明
  • 机器学习 vs. 深度学习
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 排序算法学习笔记
  • 前端面试题总结
  • 如何选择开源的机器学习框架?
  • 通过几道题目学习二叉搜索树
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 消息队列系列二(IOT中消息队列的应用)
  • 用Canvas画一棵二叉树
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​secrets --- 生成管理密码的安全随机数​
  • ​ssh免密码登录设置及问题总结
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $.proxy和$.extend
  • $NOIp2018$劝退记
  • (c语言)strcpy函数用法
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (七)Java对象在Hibernate持久化层的状态
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • *** 2003
  • .form文件_SSM框架文件上传篇
  • .gitignore文件设置了忽略但不生效
  • .Net环境下的缓存技术介绍
  • .sys文件乱码_python vscode输出乱码
  • @RequestBody与@ModelAttribute
  • @SuppressWarnings注解
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • []我的函数库
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [BSGS算法]纯水斐波那契数列