首页 > 其他分享 >bs4爬虫解析

bs4爬虫解析

时间:2024-04-17 13:14:55浏览次数:22  
标签:story bs4 爬虫 class Dormouse soup 解析 find

记录使用bs4解析网页的基本方法,,完整使用文档可见bs4使用文档

安装bs4

pip install bs4

创建beautifulSoup对象

from bs4 import BeautifulSoup
soup = BeautifulSoup(open("index.html"))
soup = BeautifulSoup("<html>data</html>")
soup = BeautiFulSouo(res)

可以传入字符串,文件句柄,或者爬取的res对象

解析

以下面这段文档作为例子:

<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>

直接使用soup

soup对象的操作方式和字典类似

soup.head
# <head><title>The Dormouse's story</title></head>
soup.title
# <title>The Dormouse's story</title>
soup.body.b
# <b>The Dormouse's story</b>
  1. 使用.string获取直系文本
  2. 使用.strings配合for获取所有文本
  3. 输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容
  4. 直接.属性即可获得对应属性值
  5. 使用或.title获取标签名
  6. 使用.标签名获取的这个标签仍然是soup对象

使用find_all(find)

find_all查找符合条件的所有标签,返回标签列表,find只查找第一个

使用单参数过滤器

find_all(name=) 这里的name是过滤器可以有非常多类型

  1. 字符串
soup.find_all('b')
# [<b>The Dormouse's story</b>]
  1. 正则表达式
for tag in soup.find_all(re.compile("t")):
    print(tag.name)
# html
# title
  1. 列表
soup.find_all(["a", "b"])
# [<b>The Dormouse's story</b>,
#  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
  1. bool值 当传入TRUE时,会返回所有找到的值
  2. 函数 用法和bool值类似,可以自行构建函数,函数接收一个标签对象,当函数最终返回True时,该标签将被选中
#下面方法校验了当前元素,如果包含 class 属性却不包含 id 属性,那么将返回 True:
def has_class_but_no_id(tag):
    return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
# [<p class="title"><b>The Dormouse's story</b></p>,
#  <p class="story">Once upon a time there were...</p>,
#  <p class="story">...</p>]

使用属性名作为函数参数名

soup.find_all(href=re.compile("elsie"))
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

可以使用多个

soup.find_all(href=re.compile("elsie"), id='link1')
# [<a class="sister" href="http://example.com/elsie" id="link1">three</a>]

class属性使用class_

soup.find_all("a", class_="sister")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

所有等于号右边都可以填入单参数中的所有类型 函数有一些自带的参数

find_all( name , attrs , recursive , string , **kwargs )
  • name:就是单参数中的参数名
  • attrs:接收字典类型的过滤soup.find_all("a", attrs={"class": "sister"})
  • limit:设定需要的个数,找到需要的数量后将停止查找
  • recursive:设定是否查找所有子节点 T:默认,查找所有子节点,F:只查找直系节点

值得注意的是,由于find_all使用过于频繁,tag对象中集成了所有find_all方法,因此你可以直接对tag对象使用find_all的方法

#两行代码是等价的
soup.find_all("a")
soup("a")
#这两行代码也是等价的:
soup.title.find_all(string=True)
soup.title(string=True)

标签:story,bs4,爬虫,class,Dormouse,soup,解析,find
From: https://www.cnblogs.com/kabaiye/p/18140373

相关文章

  • 爬虫-xpath解析
    你好一、xpath解析原理实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获使用lxml模块1.1实例化一个etree对象将本地的html文档中的源码数据加载到etree对象中:etree.parse(fil......
  • python爬虫使用selenium
    由于selenium更各版本用法不一,本文使用的环境是selenium4.13,python3.11.0,不同环境可能失效忽略这一行安装pipinstallselenium安装驱动chrome浏览器谷歌驱动官网下载地址如果你的谷歌是最新版(在设置-关于Chrome查看版本),直接前往最新版下载地址你还可以访问这个json文件......
  • gevent实现协程爬虫
    这里只供基础的爬虫需求,协程是什么和gevent进阶用法就不赘述了下载pipinstallgevent基本流程1.打补丁打补丁的意思是使用gevent的monkey类将python的一些标准库函数的阻塞调用都改成协作式的,这部分不懂可以不用管,在你的代码上固定下面两行就好。fromgeventimportmonke......
  • 【爆款推荐】初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高
    PDF格式公众号回复关键字:ZKYDT003原文1HowmanychildrendoesSumnerhave?解析Howmanychildren多少孩子,SumnerhaveSumner有,标题问Sumner有几个孩子?文本信息IstoppedbecauseIhadneverseen'ournormal'insuchaplace,"themotherofthreechildr......
  • React前端技术深度解析与实践
    React作为当今最热门的前端技术之一,以其组件化、高效性和灵活性等特点赢得了广大开发者的青睐。本文将深入探讨React前端技术的核心原理、实践技巧以及未来的发展趋势,帮助读者更好地理解和应用React。一、React的核心原理React的核心原理是组件化开发。组件是React应用的基本构......
  • React的核心原理:组件化开发深度解析
    React的核心原理:组件化开发深度解析React,作为当今最流行的前端框架之一,其成功的背后离不开其核心原理——组件化开发。组件化开发不仅简化了前端开发的复杂性,还提高了代码的可重用性和可维护性。本文将深入探讨React组件化开发的原理、优势以及实践中的注意事项。一、组件化开发......
  • 在Linux中,如何配置DNS服务器和解析服务?
    在Linux中,配置DNS服务器和解析服务通常涉及安装和配置DNS服务器软件,如BIND(BerkeleyInternetNameDomain),或使用操作系统自带的DNS服务。以下是配置DNS服务器的基本步骤:1.安装BIND安装BIND软件包:根据你的Linux发行版,使用包管理器安装BIND。sudoapt-getinstallbind9#......
  • csharp selenium HtmlAgilityPack 爬虫 网页解析 微信公众号
    Wechat.Crawler/App/App.csproj<ProjectSdk="Microsoft.NET.Sdk"><ItemGroup><ProjectReferenceInclude="..\Blog\Blog.csproj"/></ItemGroup><ItemGroup><NoneUpdate="nlog.config&......
  • 深度探索:Secure Hash Algorithm(SHA)全景解析
    title:深度探索:SecureHashAlgorithm(SHA)全景解析date:2024/4/1518:33:17updated:2024/4/1518:33:17tags:SHA安全抗碰撞性算法版本实现细节性能优化发展历史应用案例密码学中的哈希函数一、哈希函数的定义哈希函数是一种数学函数,它接受任意长度的输入数据(......
  • PandasTA 源码解析(二十三)
    .\pandas-ta\tests\__init__.py#导入必要的模块importnumpyasnpimportmatplotlib.pyplotasplt#生成一组随机数据x=np.random.randn(1000)#创建一个频率直方图plt.hist(x,bins=30,edgecolor='black')#设置图表标题plt.title('HistogramofRandomData')......