python从入门到精通(十六):python爬虫的BeautifulSoup4

2024-02-11 07:12

本文主要是介绍python从入门到精通(十六):python爬虫的BeautifulSoup4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python爬虫的BeautifulSoup4

  • BeautifulSoup4
    • 导入模块
    • 解析文件
    • 创建对象
    • python解析器
    • beautifulsoup对象的种类
      • Tag获取整个标签
      • 获取标签里的属性和属性值
      • Navigablestring 获取标签里的内容
      • BeautifulSoup获取整个文档
            • Comment输出的内容不包含注释符号
            • BeautifulSoup文档遍历
            • BeautifulSoup文档搜索

BeautifulSoup4

导入模块

from bs4 import BeautifulSoup

解析文件

如果是本地文件,直接以写入权限打开,并用bs解析

with open('index.html', 'r', encoding='utf-8') as f:html = f.read()

如果是网页文件,则需要先用爬虫爬取,然后解析

response = requests.get(url=url, headers=headers)
html = response.text

创建对象

解析的第一步,是构建一个BeautifulSoup对象,基本用法:

response = requests.get(url=url, headers=headers)
html = response.text
soup = beautifulsoup(html,'html.parser')  #处理html的解析器

python解析器

在这里插入图片描述

soup = beautifulsoup(html,'html.parser')
soup = beautifulsoup(html,'lxml')
soup = beautifulsoup(html,'xml')

beautifulsoup对象的种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

Tag获取整个标签

tag中最重要的属性:name和attributes

from bs4 import BeautifulSoup
# 逐一解析数据 把html使用html.parser进行解析
bs = BeautifulSoup(html,"html.parser")
print(bs.a)  # 返回找到的第一个a标签,返回时的整个标签 Tag
print(bs.title)
<title>百度一下你就知道<title>

获取标签里的属性和属性值

bs = BeautifulSoup(html,"html.parser")
print(bs.a.attrs)  # 返回找到的第一个title标签的属性和属性值,字典形式
{'href': 'https://accounts.douban.com/passport/login?source=movie', 'class': ['nav-login'], 'rel': ['nofollow']}
print(bs.a.attrs['href']) #查看某个属性的值
'https://accounts.douban.com/passport/login?source=movie'# 获取p标签的属性
bs.a.attrs(返回字典) or soup.p.attrs['class'](class返回列表,其余属性返回字符串)
bs.a.['class'](class返回列表,其余属性返回字符串)
bs.a.get('class')(class返回列表,其余属性返回字符串)

Navigablestring 获取标签里的内容

bs = BeautifulSoup(html,"html.parser")
print(bs.title.string)  # 返回找到的第一个title标签的内容 字符串
百度一下你就知道
bs.title.string 
bs.title.text
bs.title.get.text()

BeautifulSoup获取整个文档

bs = BeautifulSoup(html,"html.parser")
print(bs)  # 返回整个文档的内容
Comment输出的内容不包含注释符号
soup = BeautifulSoup('<p class="t1"><!-- <div class="env">env的信息内容</div> --></p>', 'html.parser')
print(soup.p.string)   
#如果标签内部的内容是注释,例如:<!--  -->;那么该NavigableSring对象会转换成Comment对象,并且会把注释符号去掉。
<div class="env">env的信息内容</div> 
BeautifulSoup文档遍历
bs = BeautifulSoup(html,"html.parser")
print(bs.a.contens)  # 返回a中的所有contens  列表形式 可以用列表遍历
print(bs.a.contens[2])
BeautifulSoup文档搜索

1.find()
查找第一个与字符串完全匹配的内容

bs = BeautifulSoup(html,"html.parser")
a_list = bs.find("a")    # 查找第一个的a标签
返回一个对象
a_list = bs.find('a')
a_list = bs.find('a', class_='xxx') # 注意class后的下划线
a_list = bs.find('a', title='xxx')
a_list = bs.find('a', id='xxx')
a_list = bs.find('a', id=compile(r'xxx'))

2.find_all()

字符串过滤,会查找所有与字符串完全匹配的内容

bs = BeautifulSoup(html,"html.parser")
a_list = bs.find_all("a")    # 查找所有的a标签
a_list = bs.find_all('a')
a_list = bs.find_all(['a','span']) #返回所有的a和span标签
a_list = bs.find_all('a', class_='xxx')
a_list = bs.find_all('a', id=compile(r'xxx'))
# 提取出前两个符合要求的
soup.find_all('a', limit=3)

3.find_parent
查找当前标签的父标签

bs = BeautifulSoup(html,"html.parser")
a_list = bs.find("a").find_parent('div')    # 查找当前a标签的父div标签

4.find_next_sibling
查找当前标签的下一个兄弟标签

bs = BeautifulSoup(html,"html.parser")
a_list = bs.find("a").find_next_sibling('div')    #  查找当前a标签的下一个div标签

5.find_previous_sibling
查找当前标签的前一个兄弟标签

bs = BeautifulSoup(html,"html.parser")
a_list = bs.find("a").find_previous_sibling('div')    #  查找当前a标签的前一个div标签

2.search()
正则表达式搜索:使用search()方法来匹配内容

a_list =  bs.find_all(re.compile("a"))

3.get_text()
获取标签内的文本内容

a_list = bs.find("a").get_text()

3.自己写方法查询

def name_is_exists(tag):return tag.has_attr("name")   # 查询标签中属性的名字为name的t_list = bs.find_all(name_is_exists)
for tag in t_list:print(tag)

4.kwargs 参数

t_list = bs.find_all(id="head")   # 查找所有的id=head的标签
t_list = bs.find_all(class=True)
t_list = bs.find_all(herf="http://news.baidu.com")

5.text参数

t_list = bs.find_all(text="hao123")   # 查找所有的id=head的标签
t_list = bs.find_all(text=["hao123","新闻","贴吧"])
for tag in t_list:print(tag)
t_list = bs.find_all(text = re.compile("\d")) # 应用正则表达式来查找包含特定文本的内容

6.limit参数

t_list = bs.find_all("a",limit=3)   # 查找前三个a标签

7.css选择器

t_list = bs.select("a")    # 查找所有的a标签
t_list = bs.select(".mnav") #  查找所有的类名为.mnav标签
t_list = bs.select("#u1") #  查找所有的id为#u1的标签
t_list = bs.select("a[class='bri']") #  查找属性为bri的标签
t_list = bs.select("head>title") #  查找head标签下的title标签
t list = bs.select(".mnav ~ .bri")  # 查找.mnav的兄弟标签.bri的text
print(t_list[0].get_text())

这篇关于python从入门到精通(十六):python爬虫的BeautifulSoup4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699173

相关文章

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

Python实现中文大写金额转阿拉伯数字

《Python实现中文大写金额转阿拉伯数字》在财务票据中,中文大写金额被广泛使用以防止篡改,但在数据处理时,我们需要将其转换为阿拉伯数字形式,下面我们就来看看如何使用Python实现这一转换吧... 目录一、核心思路拆解二、中文数字解析实现三、大单位分割策略四、元角分综合处理五、测试验证六、全部代码在财务票

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

python中getsizeof和asizeof的区别小结

《python中getsizeof和asizeof的区别小结》本文详细的介绍了getsizeof和asizeof的区别,这两个函数都用于获取对象的内存占用大小,它们来自不同的库,下面就来详细的介绍一下... 目录sys.getsizeof (python 内置)pympler.asizeof.asizeof