Web爬虫|入门教程之解析库Beautiful Soup

网络爬虫开发实战源码:https://github.com/MakerChen66/Python3Spider

原创不易,本文禁止抄袭、转载,多年爬虫实战开发经验总结,侵权必究!

一、Beautiful Soup

Beautiful Soup介绍:

爬虫利器,出色的解析工具
下载官网:https://www.crummy.com/software/BeautifulSoup

安装方式:
Windows用户在命令行中输入:

pip install lxml -i https://pypi.doubanio.com/simple     
pip install beautifulsoup4 -i https://pypi.doubanio.com/simple

Mac用户输入:

pip3 install lxml -i https://pypi.doubanio.com/simple    
pip3 install beautifulsoup4 -i https://pypi.doubanio.com/simple  

注意导入时的模块名称:

from bs4 import  BeautifulSoup

我们只需要bs4里的BeautufulSoup模块

一个简单例子:prettify()格式化输出
在这里插入图片描述
在这里插入图片描述

1.1 四大对象种类

1.1.1 四大对象种类——Tag

Tag就是HTML中的一个个标签
注意:返回的是第一个符合要求的标签(即使HTML中有多个符合要求的标签)
在这里插入图片描述
在这里插入图片描述
attrs() ->获取标签的元素属性
get()方法 ->获取标签的某个元素值
可以通过修改字典的方式对这些属性和内容等等进行修改,删除等操作
在这里插入图片描述

1.1.2 四大对象种类——NavigableString

获取某个标签里面的内容
在这里插入图片描述
在这里插入图片描述

1.1.3 四大对象种类——Comment

<!-- Custom styles for this template -->

HTML中可以用<!-- 注释内容 -->来添加,即不通过网页渲染出来的内容

1.1.4 四大对象种类——BeautifulSoup

BeautifulSoup 对象表示的是一个文档的全部内容
在这里插入图片描述
在这里插入图片描述

1.2 文档树

1.2.1 文档树——所有子孙节点

.descendants 把某个标签内的子孙节点都列出来,可以通过for循环来处理

for child in soup.descendants:
    print(child)

注意:空格和换行都算一个节点

1.2.2 文档树——节点内容

想要获得一个Tag下面的多个内容,该如何操作?.strings或者.stripped_strings

for string in soup.ol.strings:
    print(string)
    
for string in soup.ol.stripped_strings:
    print(string)

.strings与.stripped_strings区别?.stripped_stirngs可以去除多余空白内容

1.2.3 文档树——父节点

.parent 获得当前tag的父节点
.parents 获得当前元素的所有父辈节点

print(soup.p.parent.name)
<a><p>Makerchen</p></a>

1.2.4 文档树——兄弟节点

兄弟节点:和当前节点在同一级的节点

<a class = "test">test</a>
<p class = "test1">test1</p>

.next_sibling 获取下一个兄弟节点
.prev_sibling 获取上一个兄弟节点

1.2.5 文档树——前后节点

前后节点:该节点之前或之后的所有节点,不分层次,注意与兄弟节点的区别

next_element
previous_element
next_elements
previous_elements

1.3 搜索文档树——find_all

.find_all 可以获得当前tag的所有tag子节点

print(soup.find_all('a'))

find_all()可以直接填的参数:标签名称(a,p,h1,ol等),列表([‘a’,‘p’]),正则表达式等

keyward参数:find_all(标签内属性名=属性值)

print(soup.find_all(content='A'))

limit参数:限制返回结果的数量
recursive参数:如果只想搜索tag的直接子节点,可以使用参数 recursive=False

1.4 CSS选择器

soup.select()筛选元素,返回的是list

语法规则:

标签名不加任何修饰
class前面加点
id前面加#

二、原文链接

本人原创公众号原文链接:阅读原文

原创不易,如果觉得有点用,希望可以随手点个赞,拜谢各位老铁!

三、作者Info

作者:小鸿的摸鱼日常,Goal:让编程更有趣!

原创微信公众号:『小鸿星空科技』,专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

转载说明:本文禁止抄袭、转载,违者必究!

猜你喜欢

转载自blog.csdn.net/qq_44000141/article/details/121317978