爱站内页反链 爱站首页反链 神马是否收录 360网站安全检测 搜狗是否收录 360是否收录 百度是否收录 百度年收录 网站年龄 百度安全 百度查询 导出链接 网站ip查询 网站ICP备案批量查询 搜狗快照 百度快照 百度反链批量查询 搜狗PR批量查询 谷歌PR批量查询 神马权重批量查询 360移动权重批量查询 站长移动权重批量查询 爱站移动权重批量查询 360权重查询 站长PC权重批量查询 爱站PC权重批量查询 搜狗总收录批量查询 360日收录批量查询 360总收录批量查询 百度月收录批量查询 百度周收录批量查询 百度日收录批量查询 百度网站收录批量查询 获取网站IP 获取网站描述 获取网站关键词 获取网站标题 HTTP状态码 搜狗权重 搜狗反链 神马总收录 百度预计流量 ALEXA排名 360反链

当前位置 博文首页 > python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门

最大化 缩小

    python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门

    作者:Freedom_Bule 时间:2021-07-26 17:43

    目录
    • 1. BeautifulSoup库简介
    • 2. BeautifulSoup库的主要解析器
    • 3. BeautifulSoup的简单使用
    • 4. BeautifuSoup的类的基本元素
      • 4.1 Tag
      • 4.2 NavigableString
      • 4.3 Comment
    • 5. 基于bs4库的HTML内容的遍历方法
      • 5.1 下行遍历
      • 5.2 上行遍历
      • 5.3 平行遍历
      • 5.4 其他遍历
    • 6. 文件树搜索
      • 6.1 name参数
      • 6.2 attrs参数
      • 6.3 string参数
      • 6.4 常用的fiid()方法如下
    • 7. 总结参考

      【python爬虫基础入门】系列是对python爬虫的一个入门练习实践,旨在用最浅显易懂的语言,总结最明了,最适合自己的方法,本人一直坚信,总结才会使人提高

      1. BeautifulSoup库简介

      BeautifulSoup库在python中被美其名为“靓汤”,它和和 lxml 一样也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,若在没用安装此库的情况下, Python 会使用 Python默认的解析器lxml,lxml 解析器更加强大,速度更快,而BeautifulSoup库中的lxml解析器则是集成了单独的lxml的特点,使得功能更加强大。

      需要注意的是,Beautiful Soup已经自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。因此在使用它的时候不需要考虑编码方式,仅仅需要说明一下原始编码方式就可以了。

      使用pip命令工具安装BeautifulSoup4库

      pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ BeautifulSoup # 使用清华大学镜像源安装

      2. BeautifulSoup库的主要解析器

      在代码中 html.parser是一种针对于html网页页面的解析器,Beautiful Soup库还有其他的解析器,用于针对不同的网页

      demo = 'https://www.baidu.com'
      soup = BeautifulSoup(demo,'html.parser') 

      解析器 使用方法 条件
      bs4的html解析器 BeautifulSoup(demo,‘html.parser') 安装bs4库
      lxml的html解析器 BeautifulSoup(demo,‘lxml') pip install lxml
      lxml的xml解析器 BeautifulSoup(demo,‘xml') pip install lxml
      html5lib的解析器 BeautifulSoup(demo,‘html5lib') pip install html5lib

      3. BeautifulSoup的简单使用

      假如有一个简单的网页,提取百度搜索页面的一部分源代码为例

      <!DOCTYPE html>
      <html>
      <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="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.
      css" rel="stylesheet" type="text/css" />
       <title>百度一下,你就知道 </title>
      </head>
      <body link="#0000cc">
       <div >
       <div >
       <div >
        <div >
        <a href="http://news.baidu.com" rel="external nofollow" rel="external nofollow" name="tj_trnews">新闻
      </a>
        <a href="https://www.hao123.com" rel="external nofollow" 
      name="tj_trhao123">hao123 </a>
        <a href="http://map.baidu.com" rel="external nofollow" name="tj_trmap">地图 </a>
        <a href="http://v.baidu.com" rel="external nofollow" name="tj_trvideo">视频 </a>
        <a href="http://tieba.baidu.com" rel="external nofollow" name="tj_trtieba">贴吧
      </a>
        <a href="//www.baidu.com/more/" rel="external nofollow" name="tj_briicon"
      >更多产品 </a>
        </div>
       </div>
       </div>
       </div>
      </body>
      </html>

      结合requests库和使用BeautifulSoup库的html解析器,对其进行解析有如下

      import requests
      from bs4 import BeautifulSoup
      
      # 使用Requests库加载页面代码
      r = requests.get('https://www.baidu.com')
      r.raise_for_status()  # 状态码返回
      r.encoding = r.apparent_encoding
      demo = r.text
      
      # 使用BeautifulSoup库解析代码
      soup = BeautifulSoup(demo,'html.parser')  # 使用html的解析器
      
      print(soup.prettify())   # prettify 方式输出页面

      在这里插入图片描述

      4. BeautifuSoup的类的基本元素

      BeautifulSoup4将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,BeautifulSoup库有针对于html的标签数的特定元素,重点有如下三种

      <p > ... </p> 
      • Tag
      • NavigableString
      • Comment
      • BeautifulSoup

      基本元素 说明
      Tag 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾,格式:soup.a或者soup.p(获取a标签中或者p标签中的内容)
      Name 标签的名字,

      的名字是‘p' 格式为:.name
      Attributes 标签的属性,字典形式组织,格式:.attrs
      NavigableString 标签内非属性字符串,<>…</>中的字符串,格式:.string
      Comment 标签内的字符串的注释部分,一种特殊的Comment类型

      4.1 Tag

      标签是html中的最基本的信息组织单元,使用方式如下

      from bs4 import BeautifulSoup
      html = 'https://www.baidu.com'
      bs = BeautifulSoup(html,"html.parser")
      
      print(bs.title) # 获取title标签的所有内容
      print(bs.head) # 获取head标签的所有内容
      print(bs.a)  # 获取第一个a标签的所有内容
      print(type(bs.a))	# 类型
      

      在Tag标签中最重要的就是html页面中的name哈attrs属性,使用方式如下

      print(bs.name)
      print(bs.head.name)			# head 之外对于其他内部标签,输出的值便为标签本身的名称
      print(bs.a.attrs) 			# 把 a 标签的所有属性打印输出了出来,得到的类型是一个字典。
      print(bs.a['class']) 		# 等价 bs.a.get('class') 也可以使用get方法,传入属性的名称,二者是等价的
      bs.a['class'] = "newClass" # 对这些属性和内容进行修改
      print(bs.a)
      del bs.a['class']			# 对这个属性进行删除
      print(bs.a)

      4.2 NavigableString

      NavigableString中的string方法用于获取标签内部的文字

      from bs4 import BeautifulSoup
      html = 'https://www.baidu.com'
      bs = BeautifulSoup(html,"html.parser")
      print(bs.title.string)
      print(type(bs.title.string))

      4.3 Comment

      Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号,用于输出注释中的内容

      from bs4 import BeautifulSoup
      html = 'https://www.baidu.com'
      bs = BeautifulSoup(html,"html.parser")
      print(bs.a)
      # 标签中的内容<a href="http://news.baidu.com" rel="external nofollow" rel="external nofollow" name="tj_trnews"><!--新闻--></a>
      print(bs.a.string) 		# 新闻
      print(type(bs.a.string)) # <class 'bs4.element.Comment'>

      5. 基于bs4库的HTML内容的遍历方法

      在HTML中有如下特定的基本格式,也是构成HTML页面的基本组成成分

      在这里插入图片描述

      而在这种基本的格式下有三种基本的遍历流程

      • 下行遍历
      • 上行遍历
      • 平行遍历

      三种种遍历方式分别是从当前节点出发。对之上或者之下或者平行的格式以及关系进行遍历

      5.1 下行遍历

      下行遍历有三种遍历的属性,分别是

      • contents
      • children
      • descendants

      属性 说明
      .contents 子节点的列表,将所有儿子节点存入列表
      .children 子节点的迭代类型,用于循环遍历儿子节点
      .descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

      使用举例

      soup = BeautifulSoup(demo,'html.parser') 
      
      # 循环遍历儿子节点
      for child in soup.body.children:
      	print(child)
      
      # 循环遍历子孙节点 
      for child in soup.body.descendants:
       print(child)
       
      # 输出子节点的列表形式
      print(soup.head.contents)
      print(soup.head.contents[1])	# 用列表索引来获取它的某一个元素

      5.2 上行遍历

      上行遍历有两种方式

      • parent
      • parents

      属性 说明
      .parent 节点的父亲标签
      .parents 节点先辈标签的迭代类型,用于循环遍历先辈节点,返回一个生成器
      使用举例

      soup = BeautifulSoup(demo,'html.parser') 
      
      for parent in soup.a.parents:
      	if parent is None:
      		parent(parent)
      	else:
      		print(parent.name)

      5.3 平行遍历

      平行遍历有四种属性

      • next_sibling
      • previous_sibling
      • next_siblings
      • previous_siblings

      属性 说明
      .next_sibling 返回按照HTML文本顺序的下一个平行节点标签
      .previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
      .next_siblings 迭代类型,返回按照html文本顺序的后续所有平行节点标签
      .previous_siblings 迭代类型,返回按照html文本顺序的前序所有平行节点标签

      在这里插入图片描述

      平行遍历举例如下

      for sibling in soup.a.next_sibling:
      	print(sibling)		# 遍历后续节点
      	
      for sibling in soup.a.previous_sibling:
      	print(sibling)		# 遍历

      5.4 其他遍历

      属性 说明
      .strings 如果Tag包含多个字符串,即在子孙节点中有内容,可以用此获取,而后进行遍历
      .stripped_strings 与strings用法一致,可以去除掉那些多余的空白内容
      .has_attr 判断Tag是否包含属性

      6. 文件树搜索

      使用soup.find_all(name,attrs,recursive,string,**kwargs)方法,用于返回一个列表类型,存储查找的结果

      • name:对标签名称的检索字符串
      • attrs:对标签属性值得检索字符串,可标注属性检索
      • recursive:是否对子孙全部检索,默认为
      • Truestring:用与在信息文本中特定字符串的检索

      6.1 name参数

      如果是指定的字符串:会查找与字符串完全匹配的内容,如下

      a_list = bs.find_all("a")
      print(a_list)		# 将会返回所有包含a标签的内容

      如果是使用正则表达式:将会使用BeautifulSoup4中的search()方法来匹配内容,如下

      from bs4 import BeautifulSoup
      import re
      
      html = 'https://www.baidu.com'
      bs = BeautifulSoup(html,"html.parser")
      t_list = bs.find_all(re.compile("a"))
      for item in t_list:
       	print(item)		# 输出列表

      如果传入一个列表:BeautifulSoup4将会与列表中的任一元素匹配到的节点返回,如下

      t_list = bs.find_all(["meta","link"])
      for item in t_list:
      	print(item)

      如果传入一个函数或者方法:将会根据函数或者方法来匹配

      from bs4 import BeautifulSoup
      
      html = 'https://www.baidu.com'
      bs = BeautifulSoup(html,"html.parser")
      def name_is_exists(tag):
       	 return tag.has_attr("name")
      t_list = bs.find_all(name_is_exists)
      for item in t_list:
       	 print(item)

      6.2 attrs参数

      并不是所有的属性都可以使用上面这种方式进行搜索,比如HTML的data属性,用于指定属性搜索

      t_list = bs.find_all(data-foo="value")

      6.3 string参数

      通过通过string参数可以搜索文档中的字符串内容,与name参数的可选值一样,string参数接受字符串,正则表达式,列表

      from bs4 import BeautifulSoup
      import re
      
      html = 'https://www.baidu.com'
      bs = BeautifulSoup(html, "html.parser")
      t_list = bs.find_all(attrs={"data-foo": "value"})
      for item in t_list:
       	print(item)
      t_list = bs.find_all(text="hao123")
      for item in t_list:
       	print(item)
      t_list = bs.find_all(text=["hao123", "地图", "贴吧"])
      for item in t_list:
       	print(item)
      t_list = bs.find_all(text=re.compile("\d"))
      for item in t_list:
       	print(item)

      使用find_all()方法的时,常用到正则表达式的形式import re如下所示

      soup.find_all(sring = re.compile('pyhton'))		# 指定查找内容
      
      # 或者指定使用正则表达式要搜索的内容
      sring = re.compile('pyhton')		# 字符为python
      soup.find_all(string)				# 调用方法模板

      6.4 常用的fiid()方法如下

      在这里插入图片描述

      7. 总结参考

      此文列举了BeautifulSoup库在爬虫中的基本使用,不正确之处望指教,参考

      jsjbwy
      上一篇: Python实现曲线拟合的最小二乘法
      下一篇:没有了
    • 立即下载 - IIS7 站长工具包
      最新 更多<<
    • python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门
    • Python实现曲线拟合的最小二乘法
    • python UIAutomator2使用超详细教程
    • 龚厂长的博客:SpringMVC-详解HandlerMapping的前世今生之BeanNa
    • python+opencv实现车道线检测
    • 龚厂长的博客:SpringMVC-处理http请求的中间桥梁HandlerAdapter
    • 龚厂长的博客:SpringMVC-处理http请求的中间桥梁HandlerAdapter
    • python的scipy.stats模块中正态分布常用函数总结
    • 龚厂长的博客:leetcode-29. 两数相除
    • 龚厂长的博客:SpringMVC-视图解析器ViewResolver详解
    • python实现根据窗口标题调用窗口的方法
    • 龚厂长的博客:leetcode-31. 下一个排列
    • 龚厂长的博客:SpringMVC-SpringMVC如何处理Controller抛出的异
    • 龚厂长的博客:Java8 Stream:实例详细介绍遍历、筛选、归约、分
    • 龚厂长的博客:Java8 新特性之全面解析方法引用
    • 龚厂长的博客:Java 8 新特性之接口默认方法和静态方法
    • 龚厂长的博客:Java 8 lambda表达式及方法引用实现原理
    • 龚厂长的博客:java8 详解时间日期API
    • RtxTitanV的博客:通过Dockerfile构建Docker镜像
    • RtxTitanV的博客:Java并发总结之线程池
    • God_Y:编程面试题整理
    • 晴天的专栏:怎样规划你毕业以后的人生
    • 流年的博客:C++语言篇 字符串及字符数组练习
    • 网名特长是不是特霸气 - 霸气网名女生超拽高雅2015
    • 看不惯我你憋着啊i - 2015超拽网名女生霸气骂人
    • 兄妹网名霸气超拽 - 兄妹网名大全2015最新版的
    • 你就是嫉妒哀家比你美 - 2015流行网名大全霸气张狂的
    • 学渣姑娘照样闯天下 - 个性女网名霸气超拽的
    • 九亿少女的梦 - LOL名字大全霸气超拽
    • 万人追不如一人疼 - 单身网名超拽霸气2015
      推荐 更多<<
    • go代码实现买房贷款月供计算的方法
    • 将txt文件名写入文件首行的bat代码(保留源文件)
    • 使用Python实现音频双通道分离

    深圳SEO优化公司海口百度标王报价邵阳SEO按天收费哪家好宣城百度标王公司甘孜网站建设哪家好阿坝优秀网站设计推荐南充网站优化按天收费推荐襄阳网站优化按天扣费报价迁安百搜标王哪家好平顶山外贸网站建设哪家好莆田网络推广多少钱清徐关键词按天扣费推荐雅安企业网站建设报价陇南网站推广方案价格盐城网页制作公司湘潭企业网站设计报价广安网页制作报价沧州百度seo多少钱濮阳至尊标王报价梧州设计公司网站价格仙桃网站建设价格思茅网页制作多少钱德宏网站优化按天计费价格平凉阿里店铺运营公司贵港网站排名优化哪家好南京百度网站优化石家庄seo网站推广公司南阳网站建设设计诸城企业网站制作玉林百度爱采购推荐福州网络推广公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化