网站推广策划书怎么说,网站建设公司中企动力强,邀请推广app,室内外设计一、了解BeautifulSoup
1、简介
一个灵活又方便的网页解析库#xff0c;最主要的功能是从网页抓取数据#xff0c;处理高效#xff0c;支持多种解析器#xff0c;
它通过转换器实现文档导航、查找、修改文档的方式。利用它可不用编写正则也能方便的实现网页信息的抓取最主要的功能是从网页抓取数据处理高效支持多种解析器
它通过转换器实现文档导航、查找、修改文档的方式。利用它可不用编写正则也能方便的实现网页信息的抓取2、安装
pip3 install BeautifulSoup4
BeautifulSoup默认支持Python的标准HTML解析库但它也支持一些第三方的解析库如果我们没有安装则 Python 会使用 Python默认的解析器不过在实际操作中
更推荐使用lxm解析器速度快而且稳定。BeautifulSoup模块可帮助解析html和xml文档中的内容尤其是在爬取特定网页信息的时候
用于解析和检查在网上看到的那些乱七八糟而且不规范的HTML页面。
二、BeautifulSoup基本运用
1、创建对象
解析的第一步是构建一个BeautifulSoup对象基本用法此处提示两点① BeautifulSoup中的B和S需大写小写会报错② BeautifulSoup自动将输入文档转换为Unicode编码输出文档转换为utf-8编码
所以当使用requests.get获得HTML文档后用它进行处理时不需要考虑编码方式。2、对象的种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,
所有对象可以归纳为4种Tag
NavigableString
BeautifulSoup
Comment
1Tag通俗点讲就是HTML中的一个个标签利用 soup加标签名轻松地获取这些标签的内容
它查找的是在所有内容中的第一个符合要求的标签
这些对象的类型是class bs4.element.Tag
Tag对象的两个重要属性name、attrs
name输出标签的标签类型名
attrs以字典的形式获取标签的属性既然利用attr获得的是字典对象那么也是可以修改和删除的2NavigableString如果拿到标签后还想获取标签中的内容则可以通过tag.string获取标签中的文字。作用获取标签内部的文字
直译可遍历的字符串
使用方法soup.p.string
对象类型class bs4.element.NavigableString3BeautifulSoup它支持遍历文档树和搜索文档树中描述的大部分方法文档对象也就是整个文档的内容
可以当做是一个Tag对象4CommentTagNavigableStringBeautifulSoup几乎覆盖了html和xml中的所有内容
但是还有一些特殊对象Comment对象用于操作文档的注释部分。Coment对象是一个特殊类型的NavigableString对象
如果标签内部的内容是注释例如!-- Elsie --那么该NavigableSring对象会转换成Comment对象
并且会把注释符号去掉。
3、遍历文档树
1子节点一个 Tag 可能包含多个字符串或其它的 Tag这些都是这个 Tag 的子节点。
BeautifulSoup 提供了许多操作和遍历子节点的属性。操作文档树最简单的方法就是告诉它你想获取的 tag 的 name。通过(.)取属性的方式只能获得当前名字的第一个 tag。要得到所有a标签可以用find_all(a)的方法。.contents获取Tag的所有子节点返回一个list.children获取Tag的所有子节点返回一个生成器.descendants获取Tag的所有子孙节点.strings如果Tag包含多个字符串即在子孙节点中有内容可以用此获取而后进行遍历.stripped_strings与strings用法一致只不过可以去除掉那些多余的空白内容2父节点.parent获取Tag的父节点.parents递归得到父辈元素的所有节点返回一个生成器3兄弟节点.previous_sibling获取当前Tag的上一个节点属性通常是字符串或空白
真实结果是当前标签与上一个标签之间的顿号和换行符。.next_sibling获取当前Tag的下一个节点属性通常是字符串或空白
真是结果是当前标签与下一个标签之间的顿号与换行符。.previous_siblings获取当前Tag的上面所有的兄弟节点返回一个生成器.next_siblings获取当前Tag的下面所有的兄弟节点返回一个生成器.previous_element获取解析过程中上一个被解析的对象(字符串或tag)
可能与previous_sibling相同但通常是不一样的。4前进和回退.next_element获取解析过程中下一个被解析的对象(字符串或tag)可能与next_sibling相同
但通常是不一样的。.previous_elements返回一个生成器可以向前访问文档的解析内容.next_elements返回一个生成器可以向后访问文档的解析内容4、BeautifulSoup的几种遍历方式
1下行遍历2上行遍历遍历所有先辈节点包括soup本身所以要区分辨别3平行遍历平行遍历必须发生在同一个父节点下的各子节点5、查找元素之 find find_all
① find返回单个元素find_all返回所有元素② 返回的都是列表每个元素都是一个bs4.element.Tag对象③ 获取包含的文本值tag.text1find ( name , attrs , recursive , text , **kwargs )查找一个元素节点返回第一个满足要求的节点信息2find_all( name , attrs , recursive , text , **kwargs )可根据标签名、属性、内容查找文档,返回所有符合条件的内容find_parents() find_parent()
find_parents()返回所有祖先节点find_parent()返回直接父节点
find_next_siblings() find_next_sibling()
find_next_siblings()返回后面所有兄弟节点find_next_sibling()返回后面第一个兄弟节点。
find_previous_siblings() find_previous_sibling()
find_previous_siblings()返回前面所有兄弟节点find_previous_sibling()返回前面第一个兄弟节点。
find_all_next() find_next()
find_all_next()返回节点后所有符合条件的节点find_next()返回第一个符合条件的节点
find_all_previous() 和 find_previous()
find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点三、BeautifulSoup使用css语法查找元素
1tag.select(css)tag是HTML文档中的一个元素节点css一般结构[tagName][attName][value] 全是可选的表示元素名称元素属性元素属性的值。2属性的语法[attName]选取带有指定属性的每个元素[attNamevalue]选取带有指定属性和值的每个元素[aattName^value]匹配属性值以value开头的每个元素[attName$value]匹配属性值以value结尾的每个元素[attName*value]匹配属性值包含value的每个元素3遍历css有多个节点时空格分开soup.select(div p)查找div节点下所有子孙p节点的信息soup.select(div p)查找div节点下所有直接子节点p的信息soup.select(div ~ p)查找div后面所有同级别兄弟节点p的信息soup.select(div p)查找前一个节点后面所有同级别兄弟节点的信息结语BeautifulSoup是一个非常强大的工具通过解析文档为用户提供需要抓取的数据
利用它可以省去很多繁琐的提取工作提高解析效率。