【Python爬虫】BeautifulSoup4 库的一些用法

 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 
它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。

安装 Beautiful Soup
 如果你安装了python3,可以在windows的命令行CMD运行下面命令
pip3 install BeautifulSoup4  

安装解析器
 Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml .在windows的命令行CMD,可以选择下列方法来安装lxml
pip3 install lxml 
 下表列出了主要的解析器,以及它们的优缺点:

 

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, "html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup, "lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库
lxml XML 解析器

BeautifulSoup(markup, ["lxml", "xml"])

BeautifulSoup(markup, "xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安装C语言库
html5libBeautifulSoup(markup, "html5lib")
  • 最好的容错性
  • 以浏览器的方式解析文档
  • 生成HTML5格式的文档
  • 速度慢
  • 不依赖外部扩展

 

具体可以参考文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id15 

 推荐使用lxml作为解析器,因为效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定.
 使用BeautifulSoup及解析器lxml解析源代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的格式的结构输出。

看一下下面的例子

 

url = requests.get('http://www.xingmeng365.com/articles.asp?id=7')
url.encoding = 'gb2312'
html_doc = url.text
soup = BeautifulSoup(html_doc,"lxml")


其中url=requests.get('链接'),通过request库,获取源代码,然后通过encoding = 'gb2312'转换格式
html_doc = url.text将源代码转换为文件,然后通过BeautifulSoup及解析器lxml,得到一个 BeautifulSoup 的对象,并能按照标准的格式的结构输出。

 

 

Beautiful Soup三种常见用法

1) 搜索tag:

 

 

 

 

print(soup.head)                 #获取头部
print(soup.title)                #获取标题
print(soup.h1)                   #获取h1标签
print(soup.title,soup.h1)        #获取title和h1 find(list)

 

 

打印出来的内容:

<title>性感女神王雨纯黑色内衣写真妩媚迷人(1/13)_性感美女_星梦365</title>
<h1>性感女神王雨纯黑色内衣写真妩媚迷人</h1>

2) 搜索属性(attrs):

 

print(soup.find(id='link3'))     #获取id为link3的标签

 

3) 搜索文字(text):

 

print(soup.title.getText())      #获取title标签的文字内容
print(soup.h1.get_text())        #获取第h1标签的文字内容
print(soup.p.get_text())         #获取p标签的文字内容
print(soup.span.get_text())      #获取span标签的文字内容

 

打印出来的内容:

性感女神王雨纯黑色内衣写真妩媚迷人(1/13)_性感美女_星梦365
性感女神王雨纯黑色内衣写真妩媚迷人

 

getText()或者get_text()都是获取属性的文字内容。

 

4)循环获取内容:

 

#循环获取所有页面链接
for link in soup.find_all('a'):print(link.get('href'))#循环获取页面所有图片链接
for link in soup.find_all('img'):print(link.get('src'))#循环获取页面所有符合要求的图片链接
for link in soup.find_all('img'):if "/upload/image" in link.get('src'):print(link.get('src'))

articles.asp?id=7&mm=2
articles.asp?id=790
articles.asp?id=7&mm=2
articles.asp?id=371
articles.asp?id=420
articles.asp?id=278
articles.asp?id=391
articles.asp?id=102

 

/images/logo.png
/upload/image/20170811/20170811210545754575.jpg
/upload/Smallpic/20179232057110.jpg
/upload/Smallpic/20171061957350.jpg
/upload/Smallpic/2017962036430.jpg
/upload/Smallpic/201792805460.jpg
/upload/Smallpic/20178161949370.jpg

/upload/image/20170811/20170811210545754575.jpg

以上就是我们常用的一些方法,具体更复杂的方法可以参考官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试开发——flask快速入门小基础

这几天看群里面的大佬基本上个个被逼相亲&#xff0c;可爱小娟娟还一天相四次&#xff08;简直了&#xff09;&#xff0c;我们程序员也是很帅的很美的&#xff0c;其实我们的头发也挺多的哈哈哈哈&#xff08;至少我身边的程序员挺多头发的&#xff0c;当然我linux老师头发有点…

【文章】鱼那么信任水, 水却煮了鱼!

鱼那么信任水&#xff0c; 水却煮了鱼。 叶子那么信任风&#xff0c; 风却吹落了叶。 人心的冷暖&#xff0c; 总是一直变幻。 熟悉的陌生了&#xff0c; 陌生的走远了。 人与人之间&#xff0c; 全靠一颗心&#xff0c; 情与情之间&#xff0c; 全凭一寸真。 落叶知秋…

VGG网络结构(二)

深度学习论文随记&#xff08;二&#xff09;---VGGNet模型解读 Very Deep Convolutional Networks forLarge-Scale Image Recognition Author: K Simonyan &#xff0c; A Zisserman Year: 2014 1、 导引 VGGNet是2014年ILSVRC竞赛的第二名&#xff0c;没错你没听错它是第…

情人节用python写个贪吃蛇安慰自己

这几天除了吃就是睡&#xff08;不知道为啥&#xff0c;吃饱就想睡&#xff09;&#xff0c;从大年三十到现在感觉啥都没做&#xff0c;写个代码安慰安慰自己吧哈哈哈哈。给大家分享几部最近看的电影&#xff08;要学英语的一定要get起来&#xff09;——《彩虹照耀》《罗宾逊漂…

【测试】用例设计思路-输入框类型功能

在我们的测试中&#xff0c;设计测试用例的质量&#xff0c;不仅与需求说明书有关&#xff0c;而且与测试人员的测试能力有关&#xff0c;今天我们通过一个典型的案例&#xff0c;总结一下对于输入框类型的功能&#xff0c;如何设计测试用例。 如图所示&#xff1a;我们需要测…

python 随机数

python中随机数的用法总结第一部分&#xff1a;numpy中的random模块numpy.random.randn(d0, d1, ..., dn)生成标准正态分布。括号里是生成的随机数的维度。将会得到一个ndarray or float,(括号里空着就会得到一个float)>>numpy.random.randn(3,4)array([[-0.64094426, -0…

RuntimeError: Working outside of request context. This typically means that you attempted to use fun

菜吃多了醉了一、报错情况二、解决办法一、报错情况 我在写装饰器的时候运行报错&#xff1a; RuntimeError: Working outside of request context.This typically means that you attempted to use functionality that needed an active HTTP request. Consult the documen…

【Python】读写文件的操作

编程语言中&#xff0c;我们经常会和文件和文件夹打交道&#xff0c;这篇文章主要讲的是Python中&#xff0c;读写文件的常用操作: 一、打开文件 openFile open(../Files/exampleFile.txt, a) 说明&#xff1a; 1. 第一个参数是文件名称&#xff0c;包括路径,可以是相对路径…

测试开发——flask视图函数与路由 实战重点

开头必须分享一个我的志玲姐姐&#xff0c;太可了&#xff01;点击此处 flask视图函数与路由的关系一、视图函数与路由 实战重点1.1 一个视图函数可以绑定多个URL地址1.2 视图装饰器应该放到最外层1.3所实现的装饰器要返回视图函数的返回值二、动态路由1. 用url匹配2. 通过传参…

【Python】文件夹的常用操作

上一篇文章主要讲了Python中&#xff0c;读写文件的常用操作&#xff0c;今天这篇文章主要讲的是关于文件夹的一些常用操作&#xff1a; 关于文件的操作&#xff0c;需要导入包&#xff1a;import os 文件操作&#xff1a; #1.创建相对路径的空文件&#xff0c;如果已有文件…

Python 中的range(),arange()函数

1.range()返回的是range object&#xff0c;而np.arange()返回的是numpy.ndarray() range 尽可用于迭代&#xff0c;而 np.arange 作用远不止于此&#xff0c;它是一个序列&#xff0c;可被当做向量使用。 2.range()不支持步长为小数&#xff0c;np.arange()支持步长为小数 3.两…

SyntaxError: Non-UTF-8 code starting with ‘\xe2‘ 今天是小白上线的一天

打代码的时候第一行的utf-8注释居然空了个格 # coding utf-8估计是甜甜的恋爱想傻了&#xff0c;我居然还去查自己错哪里了&#xff0c;还说我的编码是对的鸭 正确输入&#xff1a; # codingutf-8

【Python爬虫】Python3+selenium环境配置

在我们爬虫爬网过程中&#xff0c;我们需要用到Python3selenium&#xff0c;Selenium是一个自动化测试工具&#xff0c;利用它我们可以驱动浏览器执行特定的动作&#xff0c;如点击、下拉等操作。对于一些JavaScript渲染的页面来说&#xff0c;这种抓取方式非常有效。 文章参考…

numpy 数组与矩阵的乘法理解

1. 当为array的时候&#xff0c;默认d*f就是对应元素的乘积&#xff0c;multiply也是对应元素的乘积&#xff0c;dot&#xff08;d,f&#xff09;会转化为矩阵的乘积&#xff0c; dot点乘意味着相加&#xff0c;而multiply只是对应元素相乘&#xff0c;不相加 2. 当为mat的时候…

(AU/PS)Adobe Audition CC.exe -系统错误 由于找不到MSVCP120.dll,无法继续执行代码。重新安装程序可能会解决此问题。

bug简直难过报错情况&#xff1a;由于找不到MSVCP120.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。最终解决办法心得体会https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这…

【数据库】Window环境安装MySQL Server 5.7.21

正常我们在mysql官网下载安装的MySQL比较大&#xff0c;因为它集成了好多东西&#xff0c;尽管方便&#xff0c;但是东西比较多&#xff0c;有些我们可能不想要&#xff0c;这时我们可以直接下载单个MySQL Server安装&#xff0c;所以这篇文章主要介绍的就是在window环境下安装…

产品经理:论项目计划有多重要?——软件项目管理

凡事预则立&#xff0c;不预则废前言一、论安迪特质与项目经理的共通性二、个人感想三、我的产品经理实习笔试前言 昨天杨老师上了一让我记忆很深刻的课&#xff0c;就是项目计划的重要性&#xff0c;以《肖申克的救赎 》为例: 《肖申克的救赎 》的背景是20世纪30年代&#xff…

Python开发中有可能遇到的套接字重复使用错误

PyCharm开发中有可能遇到的套接字重复使用错误 windows下在PyCharm中执行python代码&#xff0c;如果源文件被修改后&#xff0c;执行窗口中的运行状态会被终结&#xff0c;重启时有可能报如下的错误&#xff1a; OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/…

Android开发环境配置介绍

在我们进行AppiumAndroid进行自动化测试时&#xff0c;我们需要安装android_sdk环境&#xff0c;安装过程发现Android SDK&#xff0c;Android studio&#xff0c;AVD Manager&#xff0c;SDK Manager等名词&#xff0c;本篇文章主要介绍的就是Android开发环境的搭建&#xff0…

python3 struct.pack方法报错argument for 's' must be a bytes object

在python3下使用struct模块代码 fileHead struct.pack(128sl, os.path.basename(filePath),os.stat(filePath).st_size); 1 抛出异常&#xff1a; argument for s must be a bytes object必须要是字节类型。 1 解决办法&#xff1a; 把字符串的地方转为字节类型,还要要先转…