python简单爬虫:爬取并统计自己博客页面的信息(三)_python怎么把从网站爬到的内容做成统计内容-程序员宅基地

技术标签: 爬虫  python  DOM  html解析器  

python简单爬虫:爬取并统计自己博客页面的信息(二)中介绍了URL管理器和html下载器的简单实现,接下来介绍html解析器的简单实现。

9. html解析器(html_parser.py)
  • html解析器的主要任务是从下载好的网页中提取所需要的数据

  • 解析html的方法主要有两种:一是正则表达式,这是将整个html内容一个超大字符串来看待,匹配出所需数据;二是使用beautifulsoup4模块进行结构化解析,是将整个html的内容看作是DOM树来解析,本文使用的是第二种方法

  • 安装beautifulsoup4模块:pip install beautifulsoup4

  • 什么是DOM(Document Object Model)

    • 对浏览器中打开的任意网页快捷键F12,可以查看当前网页的html文档
    • 一个html文档是由很多个html元素构成的,遵循HTML标准
    • 简单来说,DOM将html文档表达为树结构,定义了访问和操作html文档的标准和接口,允许程序和脚本动态地访问和更新html文档的内容、结构和样式
    • 下面是一个简单的DOM树示图
      spider-DOM
  • 举个例子说明如何使用bs4来解析html文档:
# coding=utf-8
from bs4 import BeautifulSoup

html_cont = "\
<html>\
<head>This is an example</head>\
<body>\
<div class='test1'>test1</div>\
<div class='test2'>test2</div>\
<div class='test3'>test3</div>\
</body>\
</html>"

# 将html_cont变成一棵DOM树,创建一个bs实例
# 使用python自带的解析工具html.parser
# 编码为utf-8
soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8')

print "---------(1)---------"
# 调用find函数查找soup实例中属性class='test1'的<div>标签,返回一个bs实例
# class_:不能使用class(python关键字)
node = soup.find('div', class_='test1')
print "node: %s"%str(node)
# 调用get_text()函数获取node的文本内容
node_cont = node.get_text()
print "node_cont: %s"%str(node_cont)

print "---------(2)---------"
body = soup.find('body')
# 调用find_all函数查找body实例中的所有<div>标签,返回一个list,list中的每一个元素都是一个bs实例
body_cont = body.find_all('div')
for i,div in enumerate(body_cont):
    print "%d-th div in <body>: %s"%(i, str(div))
  • 运行结果如下:
---------(1)---------
node: <div class="test1">test1</div>
node_cont: test1
---------(2)---------
0-th div in <body>: <div class="test1">test1</div>
1-th div in <body>: <div class="test2">test2</div>
2-th div in <body>: <div class="test3">test3</div>

今天暂时介绍到这里,接下来会介绍结果输出器和mysql模块的内容,并给出结果展示:python简单爬虫:爬取并统计自己博客页面的信息(四)

如果想看整个工程的代码,可以戳 github: spiderMyCsdn

谢谢大家~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Yvettre/article/details/79942294

智能推荐

js实现正则表达式验证邮箱_电子邮件需要在js添加正则表达式验证-程序员宅基地

文章浏览阅读3.2w次,点赞3次,收藏13次。js实现正则表达式验证邮箱//这个验证有问题,[email protected]这样子的也能通过function check(){//验证账号是否合法//验证规则:字母,数字,下划线组成,字母开头,4-16位//语法:/^\w$/ \w*\w{0,}//var filter=/^[a-zA-Z]\w{3,15}$/;//var filter=new Re_电子邮件需要在js添加正则表达式验证

3代 C语言刷题程序-程序员宅基地

文章浏览阅读197次。添加随机刷题与顺序刷题(顺序可选定指定题数开始)

内存学习(四):内存映射2_匿名映射和文件映射-程序员宅基地

内存映射2涉及虚拟内存区域的成员和文件映射的虚拟内存区域。虚拟内存区域使用红黑树存储,以提高查找速度。

es6 filter函数的用法_Es6简化操作的一些数组方法使用及原理-程序员宅基地

文章浏览阅读227次。结合Es6数组方法的使用在Vue中使用更加简单数组下面方法都用这个数组es6之前遍历数组我们通常使用for循环来遍历数组 ,拿到数组中的每一项for循环forEach(遍历)forEach: forEach()会遍历数组, 循环体内没有返回值,forEach()循环不会改变原来数组的内容, forEach()有三个参数, 第一个参数是当前数组的每一项元素, 第二个参数是当前数组每一项元素的..._es6 filter 简便写法

MySQL锁表查询不到进程,如何处理_mysql查看表占用但是查不到占用进程-程序员宅基地

文章浏览阅读1.1k次。背景测试同事通过更新某个表的数据进行功能测试,突然说锁表了,也不知道原因为何,一直用的Navicat,然后用show OPEN TABLES where In_use > 0;命令也查询不到具体的进程ID常规解决办法查询是否锁表show OPEN TABLES where In_use > 0;查询进程show processlist;查询到相对应的进程,然后..._mysql查看表占用但是查不到占用进程

java 中 10进制 转为 4位 或者8位 16进制数_java %08x-程序员宅基地

文章浏览阅读3.9k次。int i =789;//输出为16进制数 Integer.toHexString(),String s=Integer.toHexString(Integer.valueOf(value));/对整数进行格式化:%[index$][标识][最小宽度]转换方式//保留 4位,不足补0s=String.format("%04x",Integer.valueOf(s));//保留 8位,不足补0s=String.format("%08x",Integer.valueOf(s));报错:jav_java %08x

随便推点

_itoa atoi、atof、itoa、itow _itoa_s 类型转换使用说明__itow_s-程序员宅基地

文章浏览阅读977次。_itoa atoi、atof、itoa、itow _itoa_s 类型转换使用说明 _itoa功能:把一整数转换为字符串用法:char * _itoa(int value, char *string, int radix);  详细解释: _itoa是英文integ__itow_s

vue+ elelment-ui +tree树形组件背景颜色的修改,点击节点背景颜色修改设置为其他颜色,或是样式不生效的原因_vue tree 鼠标放上显示灰色-程序员宅基地

文章浏览阅读2.4w次,点赞16次,收藏37次。本文仅作为我在初次学习vue+element-ui路上碰到的一些问题以及解决的办法的记录,不论问题的难易程度,于我而言是一种成长过程的记录,望大佬勿喷。vue+ elelment-ui +tree树形组件背景颜色的修改,直接在Element官网拷贝过来的树形组件背景颜色是白色,每次点击以及鼠标悬浮上后会有一个偏灰的背景颜色。如图但是如果我需要用树形组件放在一个黑色背景或其他背景颜色时,树形自..._vue tree 鼠标放上显示灰色

实现KMO和Bartlett的球形度检验的两种方法_kmo检验和bartlett球形检验-程序员宅基地

文章浏览阅读10w+次,点赞31次,收藏248次。文章目录实现KMO和Bartlett的球形度检验的两种方法SPSS 实现KMO和Bartlett的球形度检验第一步:选择“因子分析”第二步:选择变量第三步:选择KMO和巴特利特球形度检验输出结果SAS 实现KMO和Bartlett的球形度检验数据集来源参考资料实现KMO和Bartlett的球形度检验的两种方法SPSS 实现KMO和Bartlett的球形度检验第一步:选择“因子分析”导入数据..._kmo检验和bartlett球形检验

cnpm安装淘宝镜像_cnpm 淘宝镜像-程序员宅基地

文章浏览阅读6k次,点赞7次,收藏13次。cnpm安装淘宝镜像npm是node提供的包管理工具,因为服务器在国外,所以速度很慢,代理下载速度慢npm是随同NodeJS一起安装的包管理工具,能解决Node.js代码部署上的很多问题常见的使用场景有以下几种:允许用户从NPM服务器下载别人编写的第三方包到本地使用允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用允许用户将自己编写的包或命令程序上传到NPM服务器供别人使用由于新版本的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以输入npm-v 来测_cnpm 淘宝镜像

了解 Xamarin.Forms 创建移动应用程序的基础知识 4 - Button_xaml语言 botton-程序员宅基地

文章浏览阅读229次。演示如何自定义 Button_xaml语言 botton

stm32资料库 6_stm ibis-程序员宅基地

文章浏览阅读1.1k次。PC端软件 1.DfuSe DfuSe——USB设备固件升级 ST扩展:包含PC端演示程序、调试演示程序和所有协议层源程序 2009年7月 DfuSe DfuSe——USB设备固件升级 ST扩展 程序包DfuSe DfuSe——USB设备固件升级 ST扩展 英文文档2.Flash loader demonstrator STM32F101xx和STM32F103xx闪存加载演示程序:包含PC端演示程序、命令行演示程序和头文件源码 20_stm ibis

推荐文章

热门文章

相关标签