Day 20 BeautifulSoup模组二

接续昨天的影片,今天的内容为介绍「更精准地」搜寻HTML元素的方法~
想在大海捞针就变得简单许多了(等等...好像没这麽夸张/images/emoticon/emoticon37.gif

以下为影片中有使用到的程序码

<!doctype html>
<!-- 请将此档案储存成bs4_HTML.html -->
<html lang="zh-tw">
<head>
    <meta charset="utf-8">
	<title>水母</title>
	<style>
        section.section1 {background-color:#AAFFEE;} /*薄荷绿*/
	    h1#title {background-color:#CCCCFF;} /*淡紫色*/
	    h1#content1 {color:#227700;} /*深绿色*/
	    h1#content2 {color:#7700BB;} /*深紫色*/
		span {color:red;}
	</style>
</head>
<body>
<h1 id="title">水母的天敌</h1>
<img src="DSC_0394.jpg" alt="於海生馆拍摄的水母" height="300" width="450">

<section class="section1">
<h1 id="content1">海龟</h1>
<p>捕食水母为生,海龟除了<span>眼睛</span>外,身体其他部分都可以抵抗水母的毒性,牠们在捕食水母时会闭上眼睛。</p>
<a href="https://zh.wikipedia.org/wiki/%E6%B5%B7%E9%BE%9F">维基百科海龟连结</a>
</section>

<section class="section1">
<h1 id="content2">紫螺</h1>
<p>分布在热带太平洋温暖的水域,爱吃漂浮在水面的水母。</p>
<a href="https://zh.wikipedia.org/wiki/%E7%B4%AB%E8%9E%BA">维基百科紫螺连结</a>
</section>

</body>
</html>
#使用HTML标签属性搜寻
#请将C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改为bs4_HTML.html在您电脑中的路径
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_1 = objsoup.find(id = "title")
print("物件类型    :", type(objtag_1))
print("列印标签    :", objtag_1)
print("列印标签内容:", objtag_1.text)

print("="*40)

objtag_2 = objsoup.find(id = "content2")
print("物件类型    :", type(objtag_2))
print("列印标签    :", objtag_2)
print("列印标签内容:", objtag_2.text)
#使用CSS搜寻
#请将C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改为bs4_HTML.html在您电脑中的路径
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_1 = objsoup.find(class_= "section1")
print("物件类型    :", type(objtag_1))
print("列印标签    :", objtag_1)
print("列印标签内容:", objtag_1.text)

print("="*100)

objtag_2 = objsoup.find_all(class_ = "section1")
print("物件类型    :", type(objtag_2))
print("列印标签    :", objtag_2)
print("列印标签内容:")
for data in objtag_2:
    print(data.text)
#select()
#请将C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改为bs4_HTML.html在您电脑中的路径
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_1 = objsoup.select('h1') #寻找所有h1标签的元素
print("所有h1标签的元素:\n", objtag_1)
print(type(objtag_1[0]))
print("="*100)

objtag_2 = objsoup.select('.section1') #寻找所有CSS class属性为section1的元素
print("所有CSS class属性为section1的元素:\n", objtag_2)

print("="*100)

objtag_3 = objsoup.select('#title') #寻找所有CSS id属性为title的元素
print("所有CSS id属性为title的元素:\n", objtag_3)

print("="*100)

objtag_4 = objsoup.select('h1#title') #寻找所有<h1>且id属性为title的元素
print("寻找所有<h1>且id属性为title的元素:\n", objtag_4)

print("="*100)
#select()
#请将C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改为bs4_HTML.html在您电脑中的路径
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

objtag_5 = objsoup.select('section.section1') #寻找所有<section>且class属性为section1的元素
print("所有<section>且class属性为section1的元素:\n", objtag_5)

print("="*100)

objtag_6 = objsoup.select('p span') #寻找所有在<p>元素内的<span>元素
print("所有在<p>元素内的<span>元素:\n", objtag_6)

print("="*100)

objtag_7 = objsoup.select('p > span') #寻找所有在<p>元素内的<span>元素,中间无其他元素
print("所有在<p>元素内的<span>元素,中间无其他元素:\n", objtag_7)

print("="*100)

objtag_8 = objsoup.select('img[height]') #寻找所有在<img>标签且有height属性的元素
print("寻找所有在<img>标签且有height属性的元素:\n", objtag_8)
#取得图片网址
#请将C:\\Users\\ASUS\\Desktop\\bs4_HTML\\修改为bs4_HTML.html在您电脑中的路径
import bs4

fn = "C:\\Users\\ASUS\\Desktop\\bs4_HTML\\bs4_HTML.html"
htmlfile = open(fn, encoding = "utf-8")
objsoup = bs4.BeautifulSoup(htmlfile, 'lxml')

img = objsoup.find('img')
print("图片网址:", img['src'])
print("图片网址:", img.get('src'))

如果在影片中有说得不太清楚或错误的地方,欢迎留言告诉我,谢谢您的指教。


<<:  [Day19] 与问题成员对话-案例一: 正弦哥

>>:  [Day 21 - React] 今晚我想来点,React的其他功能

Day.18 「从函式物件认识 作用域 与 提升!」 —— JavaScript 函式(Function) & 作用域(Scope) & 提升(Hoisting)

函数也是个物件型别,可以封装一些功能(程序码),在需要使用的时候执行功能(程序码)。 例如我们需要...

AIS3

今天来分享我在 AIS 的所见所闻! 进入正题 前些天的文章中已经向各位分享 AIS 的报名方式 (...

Day.14 「基础打稳了,就能走得更长久~」 —— JavaScript 基础运算子

学习任何东西,都要把基础学的扎实,基础稳了,遇到问题就能迎刃而解。 而学习程序语言的基础就是数学逻...

Day-5 演算法分析工具 : 渐进式符号(Big-O, Big-Theta, Big-Omega)

前言 比较合并排序法与插入排序法,一旦输入n的规模足够大时,合并排序在最坏情况所需的时间Θ,而插入排...

【JavaScript】阵列与常用的四种新增删除方法

【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...