python爬虫(5)——BeautifulSoup的使用

目录

BeautifulSoup的使用

BeautifulSoup的下载安装

BeautifulSoup的简单使用

获取标签信息

搜索文档树

CSS选择器


BeautifulSoup的使用

BeautifulSoup的下载安装

使用pip工具在DOS窗口进行下载安装,敲入命令:pip install bs4

BeautifulSoup的简单使用

data.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>测试</title>
</head>
<body>
    <h1>这是一个测试文件</h1>
</body>
</html>

python文件

from bs4 import BeautifulSoup

# 下载安装: pip install bs4

html = "<a href='#'>超链接</a>"

# 解析字符串形式的HTML
soup = BeautifulSoup(html, "lxml")  # 第一个参数是要被解析的HTML字符串,第二个参数是固定的使用lxml
print(soup)
print("\n\n")

# 解析本地HTML文件
soup2 = BeautifulSoup(open("data.html", "rb"), "lxml")
# 格式化输出soup对象
print(soup2.prettify())

控制台打印:

<html><body><a href="#">超链接</a></body></html>



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>测试</title>
</head>
<body>
<h1>这是一个测试文件</h1>
</body>
</html>

获取标签信息

from bs4 import BeautifulSoup

html = """
    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>测试</title>
</head>
<body>
    <h1>这是一个测试文件</h1>
    <a href="http://www.baidu.com" class="red">百度</a>
</body>
</html>
"""

# 解析字符串HTML
soup = BeautifulSoup(html, "lxml")

# 根据标签名获取标签信息
# 语法:soup.tagName
# 其中soup是BeautifulSoup对象,tagName是标签名
print(soup.title)
print("------------------------------------------------")

# 获取标签内容
# 语法:soup.tagName.string
# 其中soup是BeautifulSoup对象,tagName是标签名,string是固定的获取标签内容
print(soup.title.string)
print("------------------------------------------------")

# 获取标签名
# 语法:soup.tagName.name
# 其中soup是BeautifulSoup对象,tagName是标签名,name是固定的获取标签名
print(soup.title.name)
print("------------------------------------------------")

# 获取标签内所有属性
# 语法:soup.tagName.attrs
# 其中soup是BeautifulSoup对象,tagName是标签名,attrs是固定的表示所有标签,返回一个字典
print(soup.a.attrs)
print("------------------------------------------------")

# 获取标签内的指定属性
# 语法:soup.tagName.attrs["attrName"]
# 其中soup是BeautifulSoup对象,tagName是标签名,attrs是固定的表示所有标签是一个字典,attrName表示需要获取的属性名
print(soup.a.attrs["href"])
print("------------------------------------------------")

# 获取直接的子标签,结果返回一个列表
# 语法:soup.tagName.contents
# 其中soup是BeautifulSoup对象,tagName是标签名,contents表示标签下的所有子标签返回一个列表
print(soup.body.contents)
print("------------------------------------------------")

# 获取直接的子标签,结果返回一个生成器
# 语法:soup.tagName.children
# 其中soup是BeautifulSoup对象,tagName是标签名,children表示标签下的所有子标签返回一个生成器
for i1 in soup.body.children:
    print(i1)
print("------------------------------------------------")

# 获取所有的子标签,结果是一个生成器
# 语法:soup.descendants
# 其中soup是BeautifulSoup对象,descendants是固定的表示获取所有子标签返回一个生成器
for i2 in soup.descendants:
    print(i2)
print("------------------------------------------------")
for i3 in soup.head.descendants:
    print(i3)
print("------------------------------------------------")

控制台打印:

<title>测试</title>
------------------------------------------------
测试
------------------------------------------------
title
------------------------------------------------
{'href': 'http://www.baidu.com', 'class': ['red']}
------------------------------------------------
http://www.baidu.com
------------------------------------------------
['\n', <h1>这是一个测试文件</h1>, '\n', <a class="red" href="http://www.baidu.com">百度</a>, '\n']
------------------------------------------------


<h1>这是一个测试文件</h1>


<a class="red" href="http://www.baidu.com">百度</a>


------------------------------------------------
html
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>测试</title>
</head>
<body>
<h1>这是一个测试文件</h1>
<a class="red" href="http://www.baidu.com">百度</a>
</body>
</html>


<head>
<meta charset="utf-8"/>
<title>测试</title>
</head>


<meta charset="utf-8"/>


<title>测试</title>
测试




<body>
<h1>这是一个测试文件</h1>
<a class="red" href="http://www.baidu.com">百度</a>
</body>


<h1>这是一个测试文件</h1>
这是一个测试文件


<a class="red" href="http://www.baidu.com">百度</a>
百度






------------------------------------------------


<meta charset="utf-8"/>


<title>测试</title>
测试


------------------------------------------------

搜索文档树

import re

from bs4 import BeautifulSoup

html = """
    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>测试</title>
</head>
<body>
    <h1 id="title">这是一个测试文件</h1>
    <a href="http://www.baidu.com" class="red">百度</a>
</body>
</html>
"""

# 解析字符串HTML
soup = BeautifulSoup(html, "lxml")

# 根据字符串查找所有的a标签,返回一个结果集,里面是装的是标签对象
data = soup.find_all("a")
for i in data:
    print(i.string)
print("--------------------------------------------")

# 根据正则表达式查找标签,匹配的是标签名
data2 = soup.find_all(re.compile("^b"))
for i2 in data2:
    print(i2)
print("--------------------------------------------")

# 根据属性查找标签
data3 = soup.find_all(id="title")
for i3 in data3:
    print(i3)
print("--------------------------------------------")

# text指定某个标签内容来获取标签内容
data4 = soup.find_all(text="百度")
print(data4)
print("--------------------------------------------")

# text指定标签内容列表来获取标签内容
data5 = soup.find_all(text=["测试", "百度"])
print(data5)
print("--------------------------------------------")

# text指定正则表达式来获取标签内容
data6 = soup.find_all(text=re.compile("度"))
print(data6)
print("--------------------------------------------")

控制台打印:

百度
--------------------------------------------
<body>
<h1 id="title">这是一个测试文件</h1>
<a class="red" href="http://www.baidu.com">百度</a>
</body>
--------------------------------------------
<h1 id="title">这是一个测试文件</h1>
--------------------------------------------
['百度']
--------------------------------------------
['测试', '百度']
--------------------------------------------
['百度']
--------------------------------------------

CSS选择器

from bs4 import BeautifulSoup

html = """
    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>测试</title>
</head>
<body>
    <h1 id="title">这是一个测试文件</h1>
    <a href="http://www.baidu.com" class="red">百度</a>
</body>
</html>
"""

# 解析字符串HTML
soup = BeautifulSoup(html, "lxml")

# 通过标签名获取标签
data1 = soup.select("a")
print(data1[0].string)
print("------------------------------")

# 通过类名获取标签
data2 = soup.select(".red")
print(data2[0].string)
print("------------------------------")

# 通过ID名来获取标签
data3 = soup.select("#title")
print(data3[0].string)
print("------------------------------")

# 通过组合选择器来获取标签
data4 = soup.select("body .red")
print(data4[0].string)
print("------------------------------")

# 通过其他属性来查找
data5 = soup.select("h1[id='title']")
print(data5[0].string)

控制台打印:

百度
------------------------------
百度
------------------------------
这是一个测试文件
------------------------------
百度
------------------------------
这是一个测试文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值