前言

本篇详细介绍beautifulsoup4的功能,从最基础的开始讲起,让小伙伴们都能入门

一、读取HTML页面

1.先写一个简单的html页面,把以下内容copy出来,保存为html格式文件

<meta charset="UTF-8"> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html><head><title>yoyo ketang</title></head>
<body>
<b><!--Hey, this in comment!--></b>
<p class="title"><b>yoyoketang</b></p>
<p class="yoyo">这里是我的微信公众号:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium</a>;
快来关注吧!</p>

<p class="story">...</p>
2.为了学习方便,可以把此html文件和脚本放同一文件夹下

3.用python的open函数读取这个html,如下图能正确打印出来,说明读取成功了

二、解析器:html.parser

1.用BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄

2.如果我们调用BeautifulSoup这个类的时候,不带"html.parser"参数,这时候会有个waring的,下图红色框框区域给出了建议。

3.html.parser这个是python库里面自带的解析器,无需安装。

4.prettify()这个方法是把文件解析成html格式,用html的标准格式输出(有缩进的)

三、对象的种类

1.Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

Tag :   标签对象,如:<p class="title"><b>yoyoketang</b></p>,这就是一个标签

NavigableString :字符对象,如:这里是我的微信公众号:yoyoketang

BeautifulSoup   :就是整个html对象

Comment    :注释对象,如:!-- for HTML5 --,它其实就是一个特殊NavigableString

2.弄清楚了这四个对象,后面所有的操作但是基于这四个(其实最后面一个comment可以忽略,几乎用不到)

四、Tag对象

1.html里面识别一个tag,其实一般像这种:

<p class="title"><b>yoyoketang</b></p>

<b>yoyoketang</b>

<head><title>yoyo ketang</title></head>

以上这些都是tag,很明显都是以<xx 开头</xx> 结尾这种,就是一个完整的tag

2.通过标签的名称,来获取tag对象

3.如果有多个相同的标签名称,返回的是第一个

五、Tag对象:name属性

1.tag的name属性,每一个tag都有name属性,用.name获取,如上面的三个name属性分别为p,b,head。也就是<xx开头的,这里的xx就是它的name属性

2.html是一个树状结构的,每个tag都有属性,整个html对象也有name属性,它的属性是:[document]

六、Tag对象:Attributes

1.tag.attrs可以打印出所有的属性,可以看出是个字典格式的

2.那么获取其中的某一个属性,就跟操作字典一样,如:tag["href"]

3.由于class属性一般可以为多个,中间空格隔开,所以class属性获取的是一个list类型:[u'sister']

4.tag.string,这里Tag对象变成NavigableString对象了,呵呵小伙伴们要懵逼了吧。其实打印出来就是一个字符串。

七、发福利

1.爬糗事百科首页的段子

# coding:utf-8
from bs4 import BeautifulSoup
import requests

r = requests.get("https://www.qiushibaike.com/")
qiubai = r.content
soup = BeautifulSoup(qiubai, "html.parser")
duanzi = soup.find_all(class_="content")
for i in duanzi:
    # tag的 .contents 属性可以将tag的子节点以列表的方式输出
    duan = i.span.contents[0]  # 取第一个
    print duan

最新文章

  1. TableView与delegate、dataResource
  2. HDU - The number of divisors(约数) about Humble Numbers
  3. coding代码仓库的配置和代码上传
  4. ali2015校园招聘笔试大题
  5. [C/C++]C++标准
  6. arraylist linkedlist性能测试
  7. java中关于类的封装与继承,this、super关键字的使用
  8. 理解Java中的字符串类型
  9. [bzoj\lydsy\大视野在线测评]题解(持续更新)
  10. Andoird 监听开机广播和关机广播
  11. UESTC_Palindromic String 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem M&gt;
  12. panda库------对数据进行操作---合并,转换,拼接
  13. Python 基础系列一:初识python(二)基本数据类型
  14. Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)
  15. linux lnmp搭建及解释
  16. 一款DMA性能优化记录:异步传输和指定实时信号做async IO
  17. 《CSS世界》读书笔记(十二)
  18. aop表达式
  19. 关于SASS
  20. 赚钱快的app

热门文章

  1. POJ3417(树上差分)
  2. iOS中数据类型转换--遇到则记录
  3. 用css来修饰页面文本
  4. bootstrap CSS表单、按钮和字体图标
  5. hihocoder offer收割编程练习赛8 C 数组分拆
  6. el-select,选择一行,取值行的对象.
  7. linux环境iptables配置
  8. bitcoin 源码解析 - 交易 Transaction
  9. nginx 新手入门
  10. VMware 彻底删除虚拟机操作系统的方法