from bs4 import BeautifulSoup

lxml 以lxml形式解析html,例:BeautifulSoup(html,'lxml') #  注:html5lib 容错率最高
find 返回找到的第一个标签
find_all 以list的形式返回找到的所有标签
limit 指定返回的标签个数
attrs 将标签属性放到一个字典中
string 获取标签下的非标签字符串(值), 返回字符串
strings 获取标签下的所有非标签字符串, 返回生成器。
stripped_strings 获取标签下的所有非标签字符串,并剔除空白字符,返回生成器。
get_text # 获取标签下的所有非标签字符串,返回字符串格式
contents、children都是返回某个标签下的直接子元素,包含字符串。 contents 返回一个列表,children 返回一个生成器

select 方法和find_all极其相似

以实际例子作说明:

1、定义一个html,并使用BeautifulSoup的lxml解析

from bs4 import BeautifulSoup
html = '''
<table>
<tr class='a1'>
<td>职位名称</td>
<td>职位类别</td>
<td>时间</td>
</tr>
<tr class='a1'>
<td><a id='test' class='test' target='_blank' href='https://www.baidu.com/'>职位一</a></td>
<td>类别一</td>
<td>时间1</td>
</tr>
<tr class='a2'>
<td><a id='test' class='test' target='_blank' href='https://www.baidu.com/'>职位二</a></td>
<td>类别二</td>
<td>时间2</td>
</tr class='a3'>
<tr>
<td><a id='test' class='test' target='_blank' href='https://www.baidu.com/'>职位3</a></td>
<td>类别3</td>
<td>时间3</td>
</tr>
</table>
<div>
这是一个div
<p>
<!-- 这是一个注释 -->
</p>
</div>
'''
soup = BeautifulSoup(html,'lxml') # 解析html

 find_all

2、获取所有的tr标签 

find 返回找到的第一个标签,find_all以list的形式返回找到的所有标签

trs = soup.find_all('tr') # 返回列表
n=1
for i in trs:
print('第{}个tr标签:'.format(n))
print(i)
n+=1

3、获取第二个tr标签

limit 可指定返回的标签数量

trs = soup.find_all('tr',limit=2)[1]  # 从列表中获取第二个元素,limit 获取标签个数
print(trs)

4、获取class='a1'的tr标签

 a.方法一: class_

trs = soup.find_all('tr',class_='a1')
n=1
for i in trs:
print('第{}个class=''a1''的tr标签:'.format(n))
print(i)
n+=1

 b.方法二:attrs 将标签属性放到一个字典中

trs = soup.find_all('tr',attrs={'class':'a1'})
n=1
for i in trs:
print('第{}个class=''a1''的tr标签:'.format(n))
print(i)
n+=1

5、提取所有id='test'且class='test'的a标签

 方法一:class_

alist = soup.find_all('a',id='test',class_='test')
n=1
for i in alist:
print('第{}个id=''test''且class=''test''的a标签:'.format(n))
print(i)
n+=1

 方法二:attrs

alist = soup.find_all('a',attrs={'id':'test','class':'test'})
n=1
for i in alist:
print('第{}个id=''test''且class=''test''的a标签:'.format(n))
print(i)
n+=1

6、获取所有a标签的href属性

alist = soup.find_all('a')

#方法一:通过下标获取
for a in alist:
href = a['href']
print(href) #方法二: 通过attrs获取
for a in alist:
href = a.attrs['href']
print(href)

7、获取所有的职位信息(所有文本信息)

string 获取标签下的非标签字符串(值), 返回字符串

注:第一个tr为标题信息,不获取。从第二个tr开始获取。

trs = soup.find_all('tr')[1:]
movies = []
for tr in trs:
move = {}
tds = tr.find_all('td')
move['td1'] = tds[0].string # string 取td的值
move['td2'] = tds[1].string
move['td3'] = tds[2].string
movies.append(move)
print(movies)

8、获取所有非标记性字符

strings 获取标签下的所有非标签字符串, 返回生成器。

trs = soup.find_all('tr')[1:]
for tr in trs:
infos = list(tr.strings) # 获取所有非标记性字符,包含换行、空格
print(infos)

9、获取所有非空字符

stripped_strings 获取标签下的所有非标签字符串,并剔除空白字符,返回生成器。

trs = soup.find_all('tr')[1:]
for tr in trs:
infos = list(tr.stripped_strings) # 获取所有非空字符,不包含换行、空格
print(infos)
# stripped_strings 获取所有职位信息
trs = soup.find_all('tr')[1:]
movies = []
for tr in trs:
move = {}
infos = list(tr.stripped_strings)
move['职位'] = infos[0]
move['类别'] = infos[1]
move['时间'] = infos[2]
movies.append(move)
print(movies)

10、get_text 获取所有职位信息

get_text  获取标签下的所有非标签字符串,返回字符串格式

trs = soup.find_all('tr')[1]
text = trs.get_text() # 返回字符串格式
print(text)

select 

11、获取所有tr标签

trs = soup.select('tr')
for i in trs:
print('tr标签:',i)

12、获取第二个tr标签

trs = soup.select('tr')[1]
print(trs)

13、获取所有class="al"的tr标签

# 方法一:
trs = soup.select('tr.a1') # tr标签的class属性
for i in trs:
print(i) # 方法二:
trs = soup.select('tr[class="a1"]') # tr标签的class属性
for i in trs:
print(i)

14、提取所有a标签的href属性

# 方法一:
a = soup.select('a')
for i in a:
print(i['href']) # 方法二:
a = soup.select('a')
for i in a:
print(i.attrs['href'])

15、获取所有的职位信息

trs = soup.select('tr')
for i in trs:
print(list(i.stripped_strings))

初识python 之 爬虫:BeautifulSoup 的 find、find_all、select 方法的更多相关文章

  1. 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据

    初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...

  2. 初识python 之 爬虫:爬取双色球中奖号码信息

    人生还是要有梦想的,毕竟还有python.比如,通过python来搞一搞彩票(双色球).注:此文仅用于python学习,结果仅作参考.用到知识点:1.爬取网页基础数据2.将数据写入excel文件3.将 ...

  3. 初识python 之 爬虫:爬取中国天气网数据

    用到模块: 获取网页并解析:import requests,html5lib from bs4 import BeautifulSoup 使用pyecharts的Bar可视化工具"绘制图表& ...

  4. 初识python 之 爬虫:使用正则表达式爬取“古诗文”网页数据

    通过requests.re(正则表达式) 爬取"古诗文"网页数据. 详细代码如下: #!/user/bin env python # author:Simple-Sir # tim ...

  5. 初识python 之 爬虫:正则表达式

    python中正则表达式功能由 re 模块提供: import re 两个主要函数: match  匹配第一个字符(从第一个字符开始匹配) search 匹配整个字符串 一.匹配单个字符 1.匹配某个 ...

  6. 初识python 之 爬虫:爬取豆瓣电影最热评论

    主要用到lxml的etree解析网页代码,xpath获取HTML标签. 代码如下: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:20 ...

  7. 初识python 之 爬虫:爬取某电影网站信息

    注:此代码仅用于个人爱好学习使用,不涉及任何商业行为!  话不多说,直接上代码: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:201 ...

  8. 初识python 之 爬虫:爬取某网站的壁纸图片

    用到的主要知识点:requests.get 获取网页HTMLetree.HTML 使用lxml解析器解析网页xpath 使用xpath获取网页标签信息.图片地址request.urlretrieve ...

  9. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

随机推荐

  1. 如何使用pycharm克隆阿里云项目

    我们回到PyCharm刚打开时的界面,如图1-1所示:   点击"Check out from Version Control" => "Git",如图1 ...

  2. java通过JDBC访问数据库(最基本的查询)

    一.步骤介绍 1.通过Class.forName()加载驱动: 2.通过DriverManager.getConnection()获取Conncetion连接对象: 3.创建Statement对象传递 ...

  3. 【C#】【MySQL】C#连接MySQL数据库(二)解析

    C# MySQL 实现简单登录验证 后端代码解析 Visual Studio中使用MySQL的环境配置 下文所有到的代码(前端后端) 请查阅这篇博文 C#连接MySQL数据库(一)代码 获取前端数据 ...

  4. 30个类手写Spring核心原理之Ioc顶层架构设计(2)

    本文节选自<Spring 5核心原理> 1 Annotation(自定义配置)模块 Annotation的代码实现我们还是沿用Mini版本的,保持不变,复制过来便可. 1.1 @GPSer ...

  5. 【阿菜做实践】利用go语言写一个简单的Pow样例

    本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdem ...

  6. uniapp实现钉钉扫码登录

    由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登录第三方网站 - ...

  7. [BUUCTF]REVERSE——[GWCTF 2019]xxor

    [GWCTF 2019]xxor 附件 步骤: 无壳,64位ida载入 程序很简单,首先让我们输入一个字符串,然后进行中间部分的操作,最后需要满足44行的if判断,看一下sub_400770函数 得到 ...

  8. [BUUCTF]PWN13——ciscn_2019_n_8

    [BUUCTF]PWN13--ciscn_2019_n_8 题目网址:https://buuoj.cn/challenges#ciscn_2019_n_8 步骤: 例行检查,32位,保护开的挺多,ca ...

  9. mapbox获取各种经纬度

    点击地图即可获取经纬度,也可以手动输入经纬度来换算 在线查看运行效果 实现方法 mapbox中通过地图点击事件来获取到坐标,然后转换为其他的坐标系并输出在屏幕上即可 获取坐标 方法很简单,给地图添加一 ...

  10. CF658A Bear and Reverse Radewoosh 题解

    Content 一场比赛有 \(n\) 道题目,其中第 \(i\) 道题目的分值为 \(p_i\),需要花费的时间为 \(t_i\).需要说明的是,\(t_i\) 越大,这道题目的难度越大.在第 \( ...