我是靠谱客的博主 紧张蛋挞,最近开发中收集的这篇文章主要介绍Python爬虫(7)BeautifulSoup4库的使用Python爬虫(7)BeautifulSoup4库的使用BeautifulSoup的听课笔记:,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Python爬虫(7)BeautifulSoup4库的使用
1.什么是BeautifulSoup?
和lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要的功能也是如何解析何提取HTML/XML数据。
lxml只会局部遍历,而BeautifulSoup是基于HTMLDOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。
BeautifulSoup用来解析HTML比较简单,API非常人性化,支持CSS选择器、Pythonbiao’zhun库中的HTML解析器,也支持lxml的xml解析器。
Beautiful Soup3目前已经停止开发
2.安装
pip install bs4
3.一个例子中介绍Beautifulsoup的简单用法
from bs4 import BeautifulSoup
html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
<tr class="h">
<td class="l" width="374">职位名称</td>
<td>职位类别</td>
<td>人数</td>
<td>地点</td>
<td>发布时间</td>
</tr>
<tr class="even">
<td class="l square"><a target="_blank" href="position_detail.php?id=29553&keywords=python&tid=0&lid=0">WXG02-133 微信运维工程师(广州)</a></td>
<td>技术类</td>
<td>1</td>
<td>广州</td>
<td>2017-11-26</td>
</tr>
<tr class="odd">
<td class="l square"><a target="_blank" href="position_detail.php?id=28921&keywords=python&tid=0&lid=0">HY2-大数据高级工程师(深圳)</a></td>
<td>技术类</td>
<td>1</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="even">
<td class="l square"><a target="_blank" href="position_detail.php?id=31801&keywords=python&tid=0&lid=0">HY2-前端开发工程师(深圳)</a></td>
<td>技术类</td>
<td>1</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="odd">
<td class="l square"><a target="_blank" href="position_detail.php?id=30868&keywords=python&tid=0&lid=0">HY2-高级数据分析工程师(深圳)</a><span class="hot"> </span></td>
<td>技术类</td>
<td>1</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="even">
<td class="l square"><a target="_blank" href="position_detail.php?id=24411&keywords=python&tid=0&lid=0">18428-财付通清算业务测试工程师(深圳)</a></td>
<td>技术类</td>
<td>7</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="odd">
<td class="l square"><a target="_blank" href="position_detail.php?id=32549&keywords=python&tid=0&lid=0">22989-腾讯云售后技术支持(深圳)</a></td>
<td>技术类</td>
<td>1</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="even">
<td class="l square"><a target="_blank" href="position_detail.php?id=32878&keywords=python&tid=0&lid=0">MIG16-地图后台高级开发工程师(北京)</a><span class="hot"> </span></td>
<td>技术类</td>
<td>1</td>
<td>北京</td>
<td>2017-11-26</td>
</tr>
<tr class="odd">
<td class="l square"><a target="_blank" href="position_detail.php?id=31864&keywords=python&tid=0&lid=0">19823-动画绑定师</a></td>
<td>设计类</td>
<td>1</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="even">
<td class="l square"><a target="_blank" href="position_detail.php?id=26381&keywords=python&tid=0&lid=0">TEG14-高级业务运维工程师(深圳)</a></td>
<td>技术类</td>
<td>1</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
<tr class="odd">
<td class="l square"><a target="_blank" class="test" id = "test" href="position_detail.php?id=30128&keywords=python&tid=0&lid=0">TEG11-数据挖掘高级工程师(深圳)</a><span class="hot"> </span></td>
<td>技术类</td>
<td>5</td>
<td>深圳</td>
<td>2017-11-26</td>
</tr>
</table>
"""
# 1.获取所有的tr标签
# soup = BeautifulSoup(html, 'lxml')
# trs = soup.find_all('tr')
# for tr in trs:
#
print(tr)
#
print("=" * 30)
# 2.获取第二个tr标签
# soup = BeautifulSoup(html, 'lxml')
# #limit参数可以指定选择tr的次数
# tr = soup.find_all('tr', limit=2)[1]
# print(tr)
# 3.获取所有class等于even的tr标签
# (1)第一种属性筛选办法
# soup = BeautifulSoup(html, 'lxml')
# # 因为class是python的关键字,所以用class_表示class
# trs = soup.find_all('tr', class_='even')
# for tr in trs:
#
print(tr)
#
print("=" * 30)
# (2)第二种属性筛选办法
# soup = BeautifulSoup(html, 'lxml')
# trs = soup.find_all('tr', attrs={'class': 'even'})
# for tr in trs:
#
print(tr)
#
print("=" * 30)
# 4.将所有id等于test,class也等于test的标签提取出来
# soup = BeautifulSoup(html, 'lxml')
# aList = soup.find_all('a', id='test', class_='test')
# for a in aList:
#
print(a)
# 5.获取所有标签的href属性
# soup = BeautifulSoup(html, 'lxml')
# aList = soup.find_all('a')
# for a in aList:
#
#第一种直接使用
#
# print(a['href'])
#
#第二种使用方法
#
print(a.attrs['href'])
#
print('=' * 30)
# 6.获取所有的职位信息(纯文本)
soup = BeautifulSoup(html, 'lxml')
trs = soup.find_all('tr')[1:]
for tr in trs:
#(1)使用strings不会把换行符取消掉
# `infos = list(tr.strings)
# print(infos)`
#(2)使用strings_stripped可以将换行符取消掉
# infos = list(tr.stripped_strings)
# print(infos)
#(3)使用string直接获得标签下的字符串内容
tds = tr.find_all('td')
for td in tds:
print(td.string)
print('='*30)
BeautifulSoup的听课笔记:
find_all的使用:
- 在提取标签的时候,第一个参数是标签的名字。然后如果在提取标签的时候想要使用标签属性进行过滤,那么可以在这个方法中通过关键字参数的形式,将属性的名字以及对应的值传进去。或者是使用
attrs
属性,将所有的属性以及对应的值放在一个字典中传给attrs
属性。 - 有些时候,在提取标签的时候,不想提取那么多,那么可以使用
limit
参数。限制提取多少个。
find与find_all的区别:
- find:找到第一个满足条件的标签就返回。说白了,就是只会返回一个元素。
- find_all:将所有满足条件的标签都返回。说白了,会返回很多标签(以列表的形式)。
使用find和find_all的过滤条件:
- 关键字参数:将属性的名字作为关键字参数的名字,以及属性的值作为关键字参数的值进行过滤。
- attrs参数:将属性条件放到一个字典中,传给attrs参数。
获取标签的属性:
- 通过下标获取:通过标签的下标的方式。
href = a['href']
- 通过attrs属性获取:示例代码:
href = a.attrs['href']
string和strings、stripped_strings属性以及get_text方法:
- string:获取某个标签下的非标签字符串。返回来的是个字符串。如果这个标签下有多行字符,那么就不能获取到了。
- strings:获取某个标签下的子孙非标签字符串。返回来的是个生成器。
- stripped_strings:获取某个标签下的子孙非标签字符串,会去掉空白字符。返回来的是个生成器。
- get_text:获取某个标签下的子孙非标签字符串。不是以列表的形式返回,是以普通字符串返回。
CSS选择器:
- 根据标签的名字选择,示例代码如下:
p{ background-color: pink; }
- 根据类名选择,那么要在类的前面加一个点。示例代码如下:
.line{ background-color: pink; }
- 根据id名字选择,那么要在id的前面加一个#号。示例代码如下:
#box{ background-color: pink; }
- 查找子孙元素。那么要在子孙元素中间有一个空格。示例代码如下:
#box p{ background-color: pink; }
- 查找直接子元素。那么要在父子元素中间有一个>。示例代码如下:
#box > p{ background-color: pink; }
- 根据属性的名字进行查找。那么应该先写标签名字,然后再在中括号中写属性的值。示例代码如下:
input[name='username']{ background-color: pink; }
- 在根据类名或者id进行查找的时候,如果还要根据标签名进行过滤。那么可以在类的前面或者id的前面加上标签名字。示例代码如下:
div#line{ background-color: pink; } div.line{ background-color: pink; }
BeautifulSop中使用css选择器:
在BeautifulSoup
中,要使用css选择器,那么应该使用soup.select()
方法。应该传递一个css选择器的字符串给select方法。
常见的四种对象:
- Tag:BeautifulSoup中所有的标签都是Tag类型,并且BeautifulSoup的对象其实本质上也是一个Tag类型。所以其实一些方法比如find、find_all并不是BeautifulSoup的,而是Tag的。
- NavigableString:继承自python中的str,用起来就跟使用python的str是一样的。
- BeautifulSoup:继承自Tag。用来生成BeaufifulSoup树的。对于一些查找方法,比如find、select这些,其实还是Tag的。
- Comment:这个也没什么好说,就是继承自NavigableString。
contents和children:
返回某个标签下的直接子元素,其中也包括字符串。他们两的区别是:contents返回来的是一个列表,children返回的是一个迭代器。
最后
以上就是紧张蛋挞为你收集整理的Python爬虫(7)BeautifulSoup4库的使用Python爬虫(7)BeautifulSoup4库的使用BeautifulSoup的听课笔记:的全部内容,希望文章能够帮你解决Python爬虫(7)BeautifulSoup4库的使用Python爬虫(7)BeautifulSoup4库的使用BeautifulSoup的听课笔记:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复