Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥

本文主要是介绍Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用bs4BeautifulSoup

  • 数据解析的作用?

    • 用来实现聚焦爬虫
  • 网页中显示的数据都是存储在那里的?

    • 都是存储在html的标签中或者是标签的属性中
  • 数据解析的通用原理是什么?

    • 指定标签的定位
    • 取出标签中存储的数据或者标签属性中的数据
  • bs4解析原理

    • 实例化一个BeautifulSoup对象,且待解析的页面源码数据加载到该对象中
    • 调用BeautifulSoup对象中相关方法或者属性进行标签定位和文本数据的提取
  • 环境的安装

    pip install lxml #解析器
    pip install bs4
    
  • BeautifulSoup对象的实例化:

    • BeautifulSoup(file,'lxml') 用来将本地存储的html文档中的数据进行解析
    • BeautifulSoup(page_text,'lxml') 用来将互联网上请求的页面源码数据进行解析

我们来看这段test.html源码:

<html lang="en">
<head><meta charset="UTF-8"><title>测试bs4</title>
</head>
<body>
<div><p>百里守约</p>
</div>
<div class="song"><p>李清照</p><p>王安石</p><p>苏轼</p><p>柳宗元</p><a href="http://www.song.com/" title="赵匡胤" target="_self"><span>this is span</span>宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a><a href="" class="du">总为浮云能蔽日,长安不见使人愁</a><img src="http://www.baidu.com/meinv.jpg" alt=""/>
</div>
<div class="tang"><ul><li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li><li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li><li><a href="" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li><li><a href="" class="du">杜甫</a></li><li><a href="" class="du">杜牧</a></li><li><b>杜小月</b></li><li><i>度蜜月</i></li><li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li></ul></div>

bs4的使用

from bs4 import BeautifulSoup
file = open('./test.html', 'r', encoding='utf-8')
soup = BeautifulSoup(file, 'lxml')
soup  # 打印出完整页面源码
  • 标签定位:

    • soup.tagName:只可以定位到第一次出现的tagName标签

      soup.p  # <p>百里守约</p>
      
  • 属性定位

    • soup.find('tagName',attrName=value):定位到第一次出现的tagName标签

      举例:

      soup.find('div', class_='song')  # 注意class 后面有 _
      

      打印结果:

      <div class="song">
      <p>李清照</p>
      <p>王安石</p>
      <p>苏轼</p>
      <p>柳宗元</p>
      <a href="http://www.song.com/" target="_self" title="赵匡胤">
      <span>this is span</span>宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
      <a class="du" href="">总为浮云能蔽日,长安不见使人愁</a>
      <img alt="" src="http://www.baidu.com/meinv.jpg"/>
      </div>
      http://www.song.com/
      

      soup.find('a', id='feng')
      

      打印结果:

      <a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>
      

      # soup.findAll:跟find一样作属性定位,只不过findAll返回的是列表,定位到所有满足条件的标签
      soup.findAll('a', id='feng')
      

      打印结果:

      [<a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>]
      

  • 选择器定位:soup.select(‘选择器’)

    • 类选择器

    • id选择器

    • 层级选择器

      • >大于号 表示一个层级

        soup.select('.tang > ul > li')
        
      • 空格表示隔多个层级

        soup.select('.tang li')
        

      其结果都是:

      [
      <li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
      <li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
      <li><a alt="qi" href="">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
      <li><a class="du" href="">杜甫</a></li>
      <li><a class="du" href="">杜牧</a></li>
      <li><b>杜小月</b></li>
      <li><i>度蜜月</i></li>
      <li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
      ]
      

  • 取数据

    • .text:返回的是该标签下所有的文本内容

    • .string:返回的是该标签直系的文本内容

    a_tag = soup.find('a', id='feng')
    # <a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>
    a_tag.text
    a_tag.string
    

    打印结果:

    凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘
    

    # 另一个例子
    a_tag=soup.find('div',class_='song')
    a_tag.strings
    '''<generator object Tag._all_strings at 0x00000200F390BAC0>''' # 不同的编译器显示不同a_tag.text
    '''
    李清照
    王安石
    苏轼
    柳宗元this is span宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱
    总为浮云能蔽日,长安不见使人愁
    '''
    

  • 取属性

    • a_tag['attrName']

    • a_tag.a['attrName']

      a_tag['class']
      # 打印结果 ['song']a_tag.a['href']
      # 打印结果 http://www.song.com/
      

这篇关于Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/817408

相关文章

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二