我们上次做了

你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

有些朋友觉得

利用正则表达式去提取信息

太特么麻烦了

有没有什么别的方式

更方便过滤我们想要的内容啊

emmmm

你还别说

还真有

有一个高效的网页解析库

它的名字叫做

BeautifulSoup

那可是

 

 

是一个可以从 HTML 或 XML 文件中提取数据的 Python 库

那么这么玩呢

...

接下来就是

学习python的正确姿势

 

 

 

首先我们要安装一下这个库

pip install beautifulsoup4

beautifulsoup支持不同的解析器

比如

对 HTML 的解析

对 XML 的解析

对 HTML5 的解析

你看

一般情况下

我们用的比较多的是 lxml 解析器

我们先来使用一个例子

让你体验一下

beautifulsoup 的一些常用的方法

可流弊了呢

比如我们有这样一段 HTML 代码

html_doc = """

<html><head><title>学习python的正确姿势</title></head>
<body>
<p class="title"><b>小帅b的故事</b></p> <p class="story">有一天,小帅b想给大家讲两个笑话
<a href="http://example.com/1" class="sister" id="link1">一个笑话长</a>,
<a href="http://example.com/2" class="sister" id="link2">一个笑话短</a> ,
他问大家,想听长的还是短的?</p> <p class="story">...</p> """

在不使用 re 来进行正则表达式的情况下

如何快速获取到我们想要的内容呢?

先安装一下

pip install beautifulsoup4

pip install lxml

接着将 html 的源代码传给 BeautifulSoup

soup = BeautifulSoup(html_doc,'lxml')

此时此刻

就不需要自己写正则匹配了

我们要做的就是从这个对象直接获取我们要的内容

获取标题的内容

print(soup.title.string)
#学习python的正确姿势

获取 p 标签里面的内容

print(soup.p.string)
#小帅b的故事

获取 title 的父级标签

print(soup.title.parent.name)
#head

获取超链接

print(soup.a)
#<a class="sister" href="http://example.com/1" id="link1">一个笑话长</a>

获取所有超链接

print(soup.find_all('a'))
#[<a class="sister" href="http://example.com/1" id="link1">一个笑话长</a>, <a class="sister" href="http://example.com/2" id="link2">一个笑话短</a>]

获取 id 为 link2 的超链接

print(soup.find(id="link2"))
#<a class="sister" href="http://example.com/2" id="link2">一个笑话短</a>

获取网页中所有的内容

print(soup.get_text())

# 学习python的正确姿势

小帅b的故事
有一天,小帅b想给大家讲两个笑话
一个笑话长,
一个笑话短 ,
他问大家,想听长的还是短的?
...

除了find方法之外

如果你对css比较熟悉

也可以使用 select 方法

soup = BeautifulSoup(html_doc,'lxml')

print(soup.select("title"))
print(soup.select("body a"))
print(soup.select("p > #link1"))

以上就是 BeautifulSoup 常用的方法

想进一步了解可以到这

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

有了它

妈妈再也不用担心我的正则表达式了

下次还有人这样问你

年轻人,不会正则表达式你睡得着觉?有点出息没有?

你可以傲娇的告诉他

睡得着

本篇完

再见

近期文章

python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?

python爬虫04 | 长江后浪推前浪,Reuqests库把urllib库拍在沙滩上

扫一扫

学习 Python 没烦恼

 

好看的人都点了

python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了的更多相关文章

  1. Python 在线免费批量美颜,妈妈再也不用担心我 P 图两小时啦

    引言 首先我承认自己标题党了,我就想提升点阅读量我容易么我,前几天的篇纯技术文阅读量都扯着蛋了. 毕竟阅读量太低实在是没有写下去的动力,我只能用点小手段偶尔提升下阅读量. 这篇文章我转换下套路,先放结 ...

  2. 妈妈再也不用担心别人问我是否真正用过redis了

    1. Memcache与Redis的区别 1.1. 存储方式不同 1.2. 数据支持类型 1.3. 使用底层模型不同 2. Redis支持的数据类型 3. Redis的回收策略 4. Redis小命令 ...

  3. 有了 tldr,妈妈再也不用担心我记不住命令了

    引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...

  4. 妈妈再也不用担心我使用git了

    妈妈再也不用担心我使用git了 Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:ms ...

  5. 利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了

    前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体 ...

  6. 锋利的js之妈妈再也不用担心我找错钱了

    用js实现收银功能. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  7. 学会了这些英文单词,妈妈再也不用担心我学不会Python

    前言   很多转行或刚入行做测试的小伙伴学习Python时,经常会问一句话:我英语不好能不能学会代码. 答案是:肯定的!你如果英语好学开发语言肯定要比不会英语的小伙伴学起来.当代码报错时全是英文,毕竟 ...

  8. [置顶] 【机器学习PAI实践十一】机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码

    背景 最近互联网上出现一个热词就是"freestyle",源于一个比拼rap的综艺节目.在节目中需要大量考验选手的freestyle能力,freestyle指的是rapper即兴的 ...

  9. 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)

    背景 最近互联网上出现一个热词就是“freestyle”,源于一个比拼rap的综艺节目.在节目中需要大量考验选手的freestyle能力,freestyle指的是rapper即兴的根据一段主题讲一串r ...

随机推荐

  1. HDU 5294 Tricks Device(多校2015 最大流+最短路啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Problem Description Innocent Wu follows Dumb Zha ...

  2. codeforces 437D The Child and Zoo

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  3. jQuery总结03

    1 控制网页元素属性和样式的 jQuery 方法有哪些? 2 利用 jQuery 插入网页节点的方法有哪些? 3 jQuery 中绑定事件是什么,如何解除绑定? 4 jQuery 中的动画效果包括哪些 ...

  4. java web支持jsonp跨域

    jsonp跨域请求处理 Jsonp(JSON with Padding) 是 json的一种"使用模式",可以让网页从别的域名(网站)那获取资料,绕过同源策略(若地址里面的协议.域 ...

  5. 服务器通信REST、gRPC,Swagger/OpenAPI

    服务间的通信方式是在采用微服务架构时需要做出一个最基本的决策.默认的选项是通过 HTTP 发送 JSON,也就是所谓的 REST API.我们也是从 REST 开始的,但最近我们决定改用 gRPC. ...

  6. mysql 年龄计算(根据生日字段)

    mysql 年龄计算(根据生日字段) year( from_days( datediff( now( ), birthdate))) //获取年龄 now() 当前时间,精确到秒 datediff(b ...

  7. docker(一):docker是什么?

    认识容器:docker入门篇 docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚 ...

  8. Spring + Redis ( 简单使用)

    1.Redis 的 Java API Java 中 使用 Redis 工具,要先去 maven 仓库中,下载 jedis jar包 jedis 依赖 <dependency> <gr ...

  9. js仿新浪游戏频道导航条

    js仿新浪游戏频道导航条 在线演示本地下载

  10. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...