菜鸟笔记
提升您的技术认知

bs4之beautiful soup-ag真人游戏

bs4之beautiful soup

      • 安装
      • 解析器说明
      • 解析文档使用方法
      • 选择器
      • 节点选择器
        • 选择元素
          • 具体解析
        • 嵌套选择
        • 关联选择
      • css选择器
        • 选择器类型及使用
        • css高级用法
          • 嵌套选择
          • 属性获取
      • 方法选择器
      • find()
      • 其他的方法选择器


三岁学编程,笔记,中间会有一些问题有待解决,希望大家一同探讨,共同提高

安装

beautiful soup 是解析html和xml的工具,并提取的数据。
安装采用安装python第三方库 bs4pip install bs4 或pip3 install bs4
beautiful soup 中支持多种解析器,包括第三方解析器

安装内容 安装代码(cmd下安装)
bs4 pip install bs4
html.parser python自带解析器无需下载
lxml解析器 pip install lxml
html5lib解析器 pip install html5lib

解析器说明

解析器 使用方法 优势 劣势
python标准库 beautiful soup(markup, ‘html.parser’) python标准库,执行速度适中文档容错能力强 2.7或3.2前版本不是很适用(容错差)
lxml解析器 beautiful soup(markup, ‘lxml’) 解析速度快,容错能力强 需要安装c语言库(第三方库)
lxml之xml解析器 beautiful soup(markup, [‘lxml’,‘xml’])或beautiful soup(markup, ‘xml’) 速度快,而且是唯一支持xml的解析器 需要安装第三方库
html5ilb beautiful soup(markup, ‘html5lib’) 最好的容错性,以浏览器形式生成html5格式文档 速度慢,不依赖拓展

建议使用lxml解析器,在实际过程中也会推荐lxml,如果是xml格式则使用xml解析器。

解析文档使用方法

因为 beautiful soup是第三方库,需要导入from bs4 import beautifulsoup

通过 beautiful soup 实例化对象(进行解析)采用beautifulsoup(markup, features)

markup : 代表要被解析的文档 ,可以直接传入,或者从文件中打开
features:代表着解析方式,就是上面的4种解析方法

#导入第三方库
from bs4 import beautifulsoup
soup = beautifulsoup(html)#把html变量进行解析
soup = beautifulsoup(open(a.html))#把文件2进行解析
注:以上未标注解析方法(解析器)时默认python自带解析器
soup = beautifulsoup(html, 'lxml')#把html变量采用‘lxml’解析器进行解析

选择器

beautiful soup 选择器有三种 分别是:节点选择器,方法选择器,css选择器

选择器 作用
节点选择器 获取数据基本方法
方法选择器 查找定位元素
css选择器 查找定位元素

当三种选择器结合运用基本上能够解决大部分的查找,偶尔加上正则表达式锦上添花

节点选择器

选择元素

节点选择器是采用标签作为节点进行提取对象但是前提是对象必须是tag对象(即标签对象)
常用属性

属性 描述
head html页面的内容
title html页面标签中之中由标记</td> </tr> <tr> <td>bady</td> <td>页面中<bady>的内容</td> </tr> <tr> <td>p</td> <td>页面中第一个<p>标签的内容</td> </tr> <tr> <td>strings</td> <td>页面上所有呈现在web上的字符串,即标签内容</td> </tr> <tr> <td>stripped_strings</td> <td>所有呈现在web的非空字符串</td> </tr> </tbody> </table> <p>emmm是不是一脸懵逼进来一脸懵逼出去,最后发现懵逼树下只有你和我。嘎嘎嘎</p> <p>emmm,小编理解,就是<br /> 实例化对象.标签名 = 标签内容</p> <p><img src="https://static.coonote.com/2022/07/5825263162728069671.png" class="aligncenter"><br /> 小编没有学过html,以上理解比较片面,如有问题请帮忙指正</p> <p>接下来以百度ag真人游戏首页为soup进行解释</p> <pre><code>url = 'http://www.baidu.com' html = gethtmltext(url)#此处省略了自定义函数 soup = beautifulsoup(html, 'lxml') print(soup.head) 结果: <head> <meta content="text/html;charset=utf-8" http-equiv="content-type"/> <meta content="ie=edge" http-equiv="x-ua-compatible"/> <meta content="always" name="referrer"/> <link href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/> <title>百度一下,你就知道 #把里面第一个标签及里面所有内容都提取出来了 print(soup.title) 结果: 百度一下,你就知道 #第一个标签及内容 print(type(soup.title)) 结果: <class 'bs4.element.tag'> #这是一个tag对象(标签对象) print(soup.p) 结果: <p id="lh"> <a href="http://home.baidu.com"> 关于百度 </a> <a href="http://ir.baidu.com"> about baidu </a> </p> </code></pre> <p>标签里面的常用属性:</p> <table> <thead> <tr> <th>属性</th> <th>返回类型及描述</th> </tr> </thead> <tbody> <tr> <td>name</td> <td>字符串,标签的名字</td> </tr> <tr> <td>attrs</td> <td>字典,包含了tag里面所有的属性</td> </tr> <tr> <td>contents</td> <td>列表,这个tag下面所有的tag的内容</td> </tr> <tr> <td>string</td> <td>字符串,tag所包围的整个文本,网页中的真实文字</td> </tr> </tbody> </table> <p>举例:还是拿百度ag真人游戏首页做例子</p> <pre><code>print(soup.a) 结果: <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a> print(soup.a.name) 结果: a print(soup.a.attrs) 结果: { 'href': 'http://news.baidu.com', 'name': 'tj_trnews', 'class': ['mnav']} print(soup.title.name) 结果: title print(soup.title.string) 结果: 百度一下,你就知道 print(soup.title.contents) 结果: ['百度一下,你就知道'] </code></pre> <h5>具体解析</h5> <p><code>soup.标签名</code><br /> 例:soup.tag<br /> 这里的name就是标签,获得的结果就是html对象的<strong>第一个</strong>该标签的<strong>全部内容</strong><br /> 该对象的类型是tag类型</p> <p><code>soup.标签名.name</code><br /> 例:soup.tag.name<br /> 结果为 a 类型为字符串</p> <p><code>soup.标签名.attrs</code><br /> 例:soup.tag.attrs<br /> 返回结果是标签里面的所有信息返回格式为字典<br /> <code>{'href': 'http://news.baidu.com', 'name': 'tj_trnews', 'class': ['mnav']}</code></p> <p><code>soup.标签名.string</code><br /> 例:soup.tag.string<br /> 返回的为标签里面的内容,返回类型为字符串</p> <h4>嵌套选择</h4> <pre><code><head> <meta content="text/html;charset=utf-8" http-equiv="content-type"/> <meta content="ie=edge" http-equiv="x-ua-compatible"/> <meta content="always" name="referrer"/> <link href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/> <title>百度一下,你就知道

以以上为例:
解析这是有一个标签对包裹的里面有3个单标签和一个单标签,同时还有一对标签构成</p> <p>可以通过<code>soup.tag.tag</code>来嵌套获得子标签内容。获得的类型还是tag类型</p> <pre><code>print(soup.head.title) 结果: <title>百度一下,你就知道 print(soup.head.title.string) 结果: 百度一下,你就知道

关联选择

在某些时候需要不能够一次性选择到位
或有几个相同的标签怎么办,那么就用关联选择。

一:子节点
soup.tag.contents
返回列表,把所有的结果都放在一个列表里面

soup.tag.children
返回一个生成器,需要通过for循环来获取各个值
for i in soup.tag.children:
print(i)

soup.tag.descendants
子孙节点返回一个生成器

二:父节点
soup.tag.parent
返回列表,返回父节点下面所有的内容(节点元素)

三:祖先节点
soup.tag.parents
返回一个生成器
用for循环进行返回,返回各个祖先节点的所有内容
也可以使用list()进行获得

list(soup.a.parents)

四:兄弟节点
获取后面一个节点
·soup.tag.next_sibling
返回一个节点元素

获取后面所有的节点
soup.tag.next_siblings
返回一个生成器

获取前面一个节点
soup.tag.previous_sibling
返回一个节点元素

返回前面所有的节点
soup.tag.previous_siblings
返回一个生成器

css选择器

使用方法:soup.select()即可获取结果
在括号中输入定位元素即可

选择器类型及使用

(1)id选择器使用#定位元素

网站地图