BeautifulSoup简介

BeautifulSoup简介Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

官方文档

安装BeautifulSoup库

pip install bs4

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • Navigable
  • String
  • BeautifulSoupComment

下文将使用Beautiful Soup各功能解析自己的博客首页:

import requests
from bs4 import BeautifulSoupblog_url = "https://www.cnblogs.com/youngleesin/"
header={
"User-Agent":"Mozilla/5.0 (Linux; U; An\
droid 8.1.0; zh-cn; BLA-AL00 Build/HUAW\
EIBLA-AL00) AppleWebKit/537.36 (KHTML, l\
ike Gecko) Version/4.0 Chrome/57.0.2987.13\
2 MQQBrowser/8.9 Mobile Safari/537.36"
}   respone = requests.get(blog_url, headers = header)blog_html = BeautifulSoup(respone.text, "lxml") # respone.text 表示被解析的html内容,lxml表示使用的解析器

标签选择器

获取标签信息的方法

# print(blog_html.prettify()) # prettify() 方法格式化显示输出,由于内容较多不展示输出信息
print("博客园的title是:", blog_html.title.string)
print("第一个a标签的信息:", blog_html.a)
print("第一个a标签的名字:", blog_html.a.name)
print("a标签父标签的名字:", blog_html.a.parent.name)
print("a标签父标签的父标签的名字:", blog_html.a.parent.parent.name)
print("title标签的子标签:",blog_html.title.contents)
print("第一个link标签的信息:", blog_html.link)
print("link标签的属性:", type(blog_html.link))
print("link标签的名字:", blog_html.link.name)
print("link标签的类型:", blog_html.link.attrs)
print("link标签的href属性是:", blog_html.link.attrs["href"])

运行结果

博客园的title是: yonugleesin - 博客园
第一个a标签的信息: <a name="top"></a>
第一个a标签的名字: a
a标签父标签的名字: body
a标签父标签的父标签的名字: html
title标签的子标签: ['yonugleesin - 博客园']
第一个link标签的信息: <link href="/bundles/blog-common.css?v=KOZafwuaDasEedEenI5aTy8aXH0epbm6VUJ0v3vsT_Q1" rel="stylesheet" type="text/css"/>
link标签的属性: <class 'bs4.element.Tag'>
link标签的名字: link
link标签的类型: {'type': 'text/css', 'rel': ['stylesheet'], 'href': '/bundles/blog-common.css?v=KOZafwuaDasEedEenI5aTy8aXH0epbm6VUJ0v3vsT_Q1'}
link标签的href属性是: /bundles/blog-common.css?v=KOZafwuaDasEedEenI5aTy8aXH0epbm6VUJ0v3vsT_Q1

find_all()方法:

常用通过find_all()方法来查找标签元素:find_all(name, attrs, recursive, text, **kwargs) ,返回一个列表类型,存储查找的结果

• name:对标签名称的检索字符串
• attrs:对标签属性值的检索字符串,可标注属性检索
• recursive:是否对子孙全部检索,默认True
• text:<>…</>中字符串区域的检索字符串

name 针对标签名检索字符串

print("检索所有a标签并输出第一个:", blog_html.find_all("a")[0])
print("检索所有div标签和a标签的内容:", blog_html.find_all(["div", "a"])) # 由于内容较多不展示输出信息
print(len(blog_html.find_all(["div", "a"])[1]))
print(len(blog_html.find_all(["div", "a"])[2]))

运行结果

检索所有a标签并输出第一个: <a name="top"></a>
12
7

遍历前三个a标签,并获取href链接

for data in blog_html.find_all("a")[0:3]:print(data.get("href"))

运行结果

None
https://www.cnblogs.com/youngleesin/
https://www.cnblogs.com/youngleesin/

attrs 针对标签属性检索字符串

print("class属性为headermaintitle的a标签:",blog_html.find_all("a",class_="headermaintitle")) # class是python的关键字,所以要加个下划线
print("name属性为top的a标签:",blog_html.find_all("a",attrs = {"name":"top"}))

运行结果

class属性为headermaintitle的a标签: [<a class="headermaintitle" href="https://www.cnblogs.com/youngleesin/" id="Header1_HeaderTitle">Young_Leesin</a>]
name属性为top的a标签: [<a name="top"></a>]

遍历class属性为menu的标签,获取href链接

for data in blog_html.find_all(class_="menu"):print(data.get("href"))

运行结果

https://www.cnblogs.com/
https://www.cnblogs.com/youngleesin/
https://i.cnblogs.com/EditPosts.aspx?opt=1
https://msg.cnblogs.com/send/yonugleesin
https://www.cnblogs.com/youngleesin/rss
https://i.cnblogs.com/

text 根据文本内容进行选择

print(blog_html.find_all(text = "博客园")) # 适合用来断言

运行结果

['博客园']

find()方法

find(name,attrs,recursive,text,**kwargs)
find和find_all的区别是find返回单个元素,findall返回所有元素

print("针对标签属性检索字符串")
print(blog_html.find_all(class_="clear"))
print("---------------------------")
print(blog_html.find(class_="clear"), "\n", "\n")print("针对文本内容检索字符串")
print(blog_html.find_all(text = "编辑"))
print("---------------------------")
print(blog_html.find(text = "编辑"))
针对标签属性检索字符串
[<div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>, <div class="clear"></div>]
---------------------------
<div class="clear"></div> 针对文本内容检索字符串
['编辑', '编辑', '编辑', '编辑', '编辑', '编辑', '编辑', '编辑', '编辑', '编辑']
---------------------------
编辑

CSS选择器

通过select()直接传入CSS选择器即可完成选择
CSS选择器参考资料
.是通过class进行匹配,#通过id进行匹配,其他方法可以参考上面的超链接

print(blog_html.select(".headermaintitle"))
print(blog_html.select("#navigator #navList #blog_nav_sitehome"))

运行结果

[<a class="headermaintitle" href="https://www.cnblogs.com/youngleesin/" id="Header1_HeaderTitle">Young_Leesin</a>]
[<a class="menu" href="https://www.cnblogs.com/" id="blog_nav_sitehome">博客园</a>]

获取内容和属性

print("第2个a标签的属性是:",blog_html.select("a")[1])
print("第1个li标签内容是:",blog_html.select("li")[0].get_text())

运行结果

第2个a标签的属性是: <a href="https://www.cnblogs.com/youngleesin/" id="lnkBlogLogo"><img alt="返回主页" id="blogLogo" src="/Skins/custom/images/logo.gif"/></a>
第1个li标签内容是: 博客园

遍历所有li标签中的内容

for Li in blog_html.select("li"):print(Li.get_text())

运行结果

博客园
首页
新随笔
联系
订阅管理

遍历所有a标签中id的属性

i=0
for a in blog_html.select("a")[0:5]:i=i+1try:print("我是第",i,"个a标签,我的id属性是:",a["id"])except:print("我是第",i,"个a标签,我的id属性是:","sorry,本标签无id属性")

运行结果

我是第 1 个a标签,我的id属性是: sorry,本标签无id属性
我是第 2 个a标签,我的id属性是: lnkBlogLogo
我是第 3 个a标签,我的id属性是: Header1_HeaderTitle
我是第 4 个a标签,我的id属性是: blog_nav_sitehome
我是第 5 个a标签,我的id属性是: blog_nav_myhome

转载于:https://www.cnblogs.com/youngleesin/p/11298639.html

Python.BeautifulSoup4相关推荐

  1. 【python+beautifulsoup4】Python中安装bs4后,pycharm报错ModuleNotFoundError: No module named 'bs4'...

    本文主要分享关于在对应python版本中安装beautifulsoup之后,在代码执行时还会提示"No module named 'bs4'"的问题. 安装beautifsoup4 ...

  2. python beautifulsoup4_【python+beautifulsoup4】Beautifulsoup4

    Beautiful soup将复杂HTML文档转换成一个复杂的属性结构,每个节点都是python对象,所有对象可归纳为4种Tag,NavigableString,BeautifulSoup,Comme ...

  3. Python BeautifulSoup4 入门使用

    一.简介 BeautifulSoup4 与 lxml 一样,是一个 html 解析器,主要功能也是解析和提取数据. BeautifulSoup4 是 爬虫 必学的技能.BeautifulSoup 最主 ...

  4. Python -- Beautifulsoup4库的使用

    Beautifulsoup4库的使用   要点:beautifulsoup4库是一个解析和处理HTML和XML的第三方库. 1.beautifulsoup4库概述   使用requests库获取HTM ...

  5. python beautifulsoup4 table tr_python BeautifulSoup解析表

    牧羊人nacy 这是通用的工作示例 (表数据)标记.它返回带有内部列的行的列表. 第一行仅接受一个(表头/数据).def tableDataText(table):           rows = ...

  6. python beautifulsoup4 table tr_使用python的BeautifulSoup解析“tbody/tr/td”

    我可以通过执行以下操作找到您想要刮取的内容:from bs4 import BeautifulSoup html = """ 1A1zP1eP5QGefi2DMPTfTL ...

  7. Yeelink初步体验

    环境 Qemu: 2.8.0 开发板:vexpress-ca9 概述 前面的博文已经使我们的虚拟开发板具备了访问外网的目的,离物联网越来越近了.要玩物联网,Yeelink不得不说,它提供了云平台,可以 ...

  8. 2022大作业项目报告

    2022大作业项目报告 项目名称:2022网络平台招聘信息汇总数据分析 班级:大数据2002 专业:大数据技术与应用 目录 文章目录 2022大作业项目报告 项目名称:2022网络平台招聘信息汇总数据 ...

  9. python 网页解析库 beautifulsoup4 简介

    HTML 文档本身是结构化的文本,有一定的规则,通过它的结构可以简化信息提取.于是,就有了lxml.pyquery.BeautifulSoup等网页信息提取库.一般我们会用这些库来提取网页信息.其中, ...

最新文章

  1. 使用Linux服务器搭建个人深度学习环境
  2. python对文件的读操作有哪些方法-Python中文件的读取和写入操作
  3. mysql索引红黑联盟_MySQL索引
  4. 《Python编程:从入门到实践 》[Eric Matthes著] 中文pdf非扫描版
  5. linux重启memcache_Linux下的Memcache安装方法
  6. OO Summary Ⅲ
  7. idea本地运行JavaWeb项目
  8. easyui框架和显示(一)
  9. 计算机本地连接无internet访问权限,ipv4连接无internet访问权限怎么解决
  10. 别人都不知道的“好用”网站,让你的效率飞快
  11. Android:日志系统
  12. 2015年最新国内十大应用商店广告报价表
  13. imagine php,Yii2第三方类库插件Imagine的安装和使用
  14. 信息学奥赛(NOIP/CSP-J/S)学习全目录
  15. TFT屏幕的显示阴影问题
  16. gfsdgfsragf
  17. 轻松在线制作各种Logo标志
  18. 三春过后诸芳尽. 荼蘼
  19. 关于树状图画法的分析
  20. linux打开文件管理器的快捷键

热门文章

  1. 51单片机如何跳出wile循环_信用卡还最低、以卡养卡、乱分期,这种“死循环”如何跳出?...
  2. c语言数组的作用是什么,C语言数组是什么
  3. php 主动推送,神马收录主动推送(php主动推送)
  4. CodeFile Inherits
  5. 查询计算机有浏览记录吗,如何查看电脑浏览记录 通过电脑日志查看浏览记录方法...
  6. java 项目数据库脚本命名_java项目酒店管理(含数据库脚本)
  7. linux下make用法
  8. com组件 安全提示_CDE 解读化学药品注射剂生产所用的塑料组件系统相容性研究技术指南(试行)...
  9. 组合公式计算机,组合数公式
  10. 文件所有者,组所有者_产品经理和产品所有者的正念技巧