python3实现网络爬虫之BeautifulSoup使用详解


Posted in Python onDecember 19, 2018

这一次我们来了解一下美味的汤--BeautifulSoup,这将是我们以后经常使用的一个库,并且非常的好用。

BeautifuleSoup库的名字取自刘易斯·卡罗尔在《爱丽丝梦游仙境》里的同名诗歌。在故事中,这首歌是素甲鱼唱的。就像它在仙境中的说法一样,BeautifulSoup尝试化平淡为神奇。它通过定位HTML标签来格式化和组织复杂的网络信息,用简单易用的Python对象为我们展现XML结构信息。

由于BeautifulSoup库不是Python标准库,因此我们需要单独安装这个库,才能使用它。对于这个库的安装,我们这里秉着简单的原则,就直接利用pycharm这个IDLE进行库的自动下载和导入。

首先我们进入pycharm的主界面,单击file-〉settings-〉Project:untitled-〉Project Interpreter,如下图:

python3实现网络爬虫之BeautifulSoup使用详解

python3实现网络爬虫之BeautifulSoup使用详解

在上图中我们会看到一个绿色的加号,这时我们单击这个加号,会跳出如下的界面(pycharm在这个地方有时候很慢,会一直在这个界面刷新):

python3实现网络爬虫之BeautifulSoup使用详解

这时我们在搜索框中输入“bs4”,然后选择列表中的bs4,然后进行安装,如下图:

python3实现网络爬虫之BeautifulSoup使用详解

这样我们就完成了BeautifulSoup这个库的安装,下面我们就可以来使用它了。

关于这个库的官方文档解释的是很详细的,一定要看一看:点击打开链接

下面我就简单说一下这个库的一些方面。

首先呢,我们还是从一个例子开始我们的学习:

#coding:utf - 8
from urllib.request import urlopen
from bs4 import BeautifulSoup
 
html = urlopen("http://tieba.baidu.com/")
bsObj=BeautifulSoup(html,"lxml")  #将html对象转化为BeautifulSoup对象
print(bsObj.title)  #输出这个网页中的标题 
执

执行上面的程序,我们会得到的结果为:<title>百度贴吧——全球最大的中文社区</title>
首先我们来分析下bsObj=BeautifulSoup(html,"lxml")这句话对我们的html做了什么,在这句代码中,我们将html对象传入到BeautifulSoup中将它转化成BeautifulSoup对象,关于第二个参数lxml,可以到官方文档中看,解释得很详细,这里大家只要知道带上它就可以了,不需要管它。这样,我们就成功将html对象转化为了BeautifulSoup对象。
下面我们来了解下BeautifulSoup对象的结构,当我们将html转化后得到的结构为:
html-><html><head>....</head><body>.....</body></html>
---head-><head><title>百度贴吧--全球最大的中文社区<title></head>

          ---title-><title>百度贴吧--全球最大的中文社区</title>

     ----body->.........

关于这个页面的结构我中间省略了一些无关紧要的元素,只是为了展示下这种层次化的结构。

从上面我们可以看出,BeautifulSoup将html对象进行了层次化处理了,对它的原网页的标签进行了逐层的处理和细化,以便于我们之后使用。也就是我们只要知道,任何HTML(或XML)文件的任意节点信息都可以被提取出来,只要目标信息的旁边或者附近有标记就行了,这个标记就是我们网页中使用到的各种div、li之类的标签元素,也可以是class、id之类的属性,通过这些我们都可以对需要的信息进行提取。

对于刚刚的bsObj.title这个提取标题的操作,由于一个网页中只有一个title,所以我们可以直接获取到它,因为它是唯一的嘛,大家可以这样理解,在一个学校中,你的学号是唯一的,我可以通过直接查找学号进而唯一的搜索你,而不会产生歧义。

对于bsObj.title我们有多重替代方案:

  • bsObj.html.head.title
  • bsObj.html.title
  • bsObj.head.title

关于上面的代码大家是对网页中元素的细化搜索,可以这样理解啊,假定你已经知道一个人是计科院的了,那你搜索他的时候常规思路便是直接在计科院找他,而bsObj.head中的head就相当于计科院,它是网页中的头部,title就放在这里面,所以我们使用bsObj.head.title也可以实现这个效果,其它的代码可以类似分析。

BeautifulSoup是一个对象,所以我们可以通过运算符“.”对它的属性进行提取。

如bsObj.title获取html的标题对象,bsObj.title.name获取标题的名字。。。

这里就先简单介绍这些,后面 我们将继续深入说明BeautifulSoup的好的使用方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python下如何让web元素的生成更简单的分析
Jul 17 Python
Python3基础之输入和输出实例分析
Aug 18 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
Python中的高级函数map/reduce使用实例
Apr 13 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Python语言的变量认识及操作方法
Feb 11 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
python实现双色球随机选号
Jan 01 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
python爬虫超时的处理的实例
Dec 19 #Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 #Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 #Python
python json.loads兼容单引号数据的方法
Dec 19 #Python
Python查找文件中包含中文的行方法
Dec 19 #Python
对python requests发送json格式数据的实例详解
Dec 19 #Python
解决Python下json.loads()中文字符出错的问题
Dec 19 #Python
You might like
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
javascript 函数式编程
2007/08/16 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
Python多线程学习资料
2012/12/19 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Django 大文件下载实现过程解析
2019/08/01 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
C#软件工程师英语面试题
2015/06/07 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
2014应届本科生自我评价
2014/09/13 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
任命通知范文
2015/04/21 职场文书
校园安全教育心得体会
2016/01/15 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
Python echarts实现数据可视化实例详解
2022/03/03 Python