zoukankan      html  css  js  c++  java
  • Python之Beautiful Soup 4使用实例

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。
    Beautiful Soup 4 官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

    一、安装Beautiful Soup

    运行cmd,cd切换到python安装目录下的Scripts目录,执行命令

    pip3 install beautifulsoup4

    二、安装解析器lxml

    Beautiful Soup支持Python标准库中的HTML解析器,也支持一些第三方的解析器,推荐用lxml,速度快,文档容错能力强,需要安装。

    pip3 install lxml

    三、使用实例

    下面测试抓取博客园首页一些信息

    1、简单信息的抓取

    import re
    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get('https://www.cnblogs.com')
    soup = BeautifulSoup(r.text, 'lxml') #lxml为解析器
    
    print(soup.title, soup.title.string) #获取指定标签,获取指定标签里面的内容
    print(soup('title'), soup('title')[0].string) #获取指定标签也可以写成这样
    print(soup.meta.get('charset')) #获取指定标签的属性
    print(soup.meta['charset']) #获取指定标签的属性也可写成这样
    print(soup.meta) #获取第一个标签(多个只取第一个)
    print(soup.find('meta')) #获取第一个标签,结果和上面一样
    print(soup.find('meta', attrs={'name':'viewport'})) #获取第一个标签,根据属性过滤获取
    print(soup.find_all('meta', attrs={'charset':True})) #获取所有标签的列表,同时根据是否含有属性charset过滤获取

    运行结果:

    <title>博客园 - 开发者的网上家园</title> 博客园 - 开发者的网上家园
    [<title>博客园 - 开发者的网上家园</title>] 博客园 - 开发者的网上家园
    utf-8
    utf-8
    <meta charset="utf-8"/>
    <meta charset="utf-8"/>
    <meta content="width=device-width, initial-scale=1" name="viewport"/>
    [<meta charset="utf-8"/>]

    2、抓取首页的导航条信息

    print('抓取导航,实现方法1')
    for item in soup.select('div#nav_menu a'):
        print(item.get('href'), item.string)
    
    print('抓取导航,实现方法2')
    for item in soup.find('div', {'id':'nav_menu'}).children:
        print(item['href'], item.string)

     运行结果:

    抓取导航,实现方法1
    https://home.cnblogs.com/ 园子
    https://news.cnblogs.com 新闻
    https://q.cnblogs.com/ 博问
    https://ing.cnblogs.com/ 闪存
    https://group.cnblogs.com/ 小组
    https://wz.cnblogs.com/ 收藏
    https://job.cnblogs.com/ 招聘
    https://edu.cnblogs.com/ 班级
    http://zzk.cnblogs.com/ 找找看
    抓取导航,实现方法2
    https://home.cnblogs.com/ 园子
    https://news.cnblogs.com 新闻
    https://q.cnblogs.com/ 博问
    https://ing.cnblogs.com/ 闪存
    https://group.cnblogs.com/ 小组
    https://wz.cnblogs.com/ 收藏
    https://job.cnblogs.com/ 招聘
    https://edu.cnblogs.com/ 班级
    http://zzk.cnblogs.com/ 找找看

    3、抓取网站分类

    print('抓取网站分类,实现方法1')
    for item in soup.select('ul#cate_item li'):
        print(item.find('a').get('href'),item.find('a').string)
    
    print('抓取网站分类,实现方法2')
    for item in soup.find_all(id=re.compile('^cate_item_')):
        print(item.find('a').get('href'),item.find('a').string)

    运行结果:

    抓取网站分类,实现方法1
    /cate/108698/ .NET技术(8)
    /cate/2/ 编程语言(41)
    /cate/108701/ 软件设计(0)
    /cate/108703/ Web前端(10)
    /cate/108704/ 企业信息化(0)
    /cate/108705/ 手机开发(3)
    /cate/108709/ 软件工程(0)
    /cate/108712/ 数据库技术(9)
    /cate/108724/ 操作系统(9)
    /cate/4/ 其他分类(16)
    /cate/all/ 所有随笔(1571)
    /comment/ 所有评论(491)
    抓取网站分类,实现方法2
    /cate/108698/ .NET技术(8)
    /cate/2/ 编程语言(41)
    /cate/108701/ 软件设计(0)
    /cate/108703/ Web前端(10)
    /cate/108704/ 企业信息化(0)
    /cate/108705/ 手机开发(3)
    /cate/108709/ 软件工程(0)
    /cate/108712/ 数据库技术(9)
    /cate/108724/ 操作系统(9)
    /cate/4/ 其他分类(16)
    /cate/all/ 所有随笔(1571)
    /comment/ 所有评论(491)

    4、抓取首页的所有随笔信息

    print('抓取随笔信息')
    post_item_body = soup.find_all('div', 'post_item_body')
    for item in post_item_body:
        print(item.h3.a['href'])
        print(item.h3.a.string)    
        print(item.p.get_text().strip())
        print(item.div.a.string)
        print(item.div.a.next_sibling.replace('发布于','').strip())

    运行结果:

    抓取随笔信息
    https://www.cnblogs.com/chq1234/p/11400367.html
    js全选与取消全选
    实现全选与取消全选的效果 要求1(将军影响士兵):点击全选按钮,下面的复选框全部选中,取消全选按钮,下面的复选框全部取消 思路:复选框是否被选中,取决于check属性,将全选按钮的check属性值赋值给下面所有复选框的check值 要求2(士兵影响将军): 当下面的某个复选框没有被选中时,全选按钮自 ...
    源氏西格玛
    2019-08-23 15:36
    https://www.cnblogs.com/lenve/p/11400056.html
    40 篇原创干货,带你进入 Spring Boot 殿堂!
    两个月前,松哥总结过一次已经完成的 Spring Boot 教程,当时感受到了小伙伴们巨大的热情。 两个月过去了,松哥的 Spring Boot 教程又更新了不少,为了方便小伙伴们查找,这里再给大家做一个索引参考。 需要再次说明的是,这一系列教程不是终点,而是一个起点,松哥后期还会不断完善这个教程, ...
    江南一点雨
    2019-08-23 14:58
    .....................后面内容太长了省略....................
  • 相关阅读:
    ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory order
    ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity
    ARMV8 datasheet学习笔记3:AArch64应用级体系结构
    ARMV8 datasheet学习笔记2:概述
    最短路径
    网络流
    二分图
    zabbix 3.4新功能值预处理
    zabbix 3.4新功能值解析——Preprocessing预处理
    Zabbix监控windows的CPU利用率和其他资源
  • 原文地址:https://www.cnblogs.com/gdjlc/p/11400523.html
Copyright © 2011-2022 走看看