一、使用步骤
1、安装包
pip3 install beautifulsoup4
2、简单的使用
html_doc = """
<html>
<head>
<title>博客</title>
</head>
<body>
<p>分享 Android 技术,也关注 Python 等热门技术。</p>
<p>写博客的初衷:总结经验,记录自己的成长。</p>
<p>你必须足够的努力,才能看起来毫不费力!专注!精致!
</p>
<p class="Blog"><a href="http://wuxiaolong.me/">WuXiaolong's blog</a></p>
<p class="WeChat"><a href="https://open.weixin.qq.com/qr/code?username=MrWuXiaolong">公众号:吴小龙同学</a> </p>
<p class="GitHub"><a href="http://example.com/tillie" class="sister" id="link3">GitHub</a></p>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, "html5lib") # html5lib是解析器
soup.find('p') # 找到第一个p标签
三、基本使用
1、基本的html结构
from bs4 import BeautifulSoup
html_doc = """
<ul>
<li class="odd"><a href="aa.html" data-id="1">链接一</a><span>第一个</span></li>
<li class="even"><a href="bb.html" data-id="2">链接二</a><span>第二个</span></li>
<li class="odd"><a href="cc.html" data-id="3">链接三</a><span>第三个</span></li>
<li class="even"><a href="dd.html" data-id="4">链接四</a><span>第四个</span></li>
<li class="odd"><a href="ee.html" data-id="5">链接五</a><span>第五个</span></li>
</ul>
"""
soup = BeautifulSoup(html_doc, 'lxml')
2、find(标签)查找第一个匹配的元素
3、find_all(标签)查找全部的标签
4、使用name获取查找的标签名
print(soup.find('a').name)
5、使用attrs获取attr属性
print(soup.find('a').attrs)
6、使用has_attr判断一个节点是否有该属性
print(soup.find('li').has_attr('class'))
7、使用get_text()获取文本内容
print(soup.find('li').get_text())
8、使用is_empty_element判断标签是否为空
print(soup.find('li').is_empty_element)
1、获取全部的tr
trs = soup.find_all('tr')
for tr in trs:
print(tr)
print('-' * 30)
2、获取第二个tr
trs = soup.find_all('tr')[1:2]
for tr in trs:
print(tr)
print('-' * 30)
# 或者使用limit
trs = soup.find_all('tr', limit=2)[1]
print(trs)
3、获取class="even"的
trs = soup.find_all('tr', class_="even")
for tr in trs:
print(tr)
print('-' * 30)
4、使用attrs的方式来写过滤条件<font color="#f00">推荐写法,可以将一切都属性都写在里面</font>
trs = soup.find_all('tr', attrs={'class': 'even'})
for tr in trs:
print(tr)
print('*' * 30)
5、获取全部a标签的href值
a_link_list = soup.find_all('a')
for item in a_link_list:
print(item.attrs['href'])
6、获取全部的职业信息
trs = soup.find_all('tr')
for tr in trs:
tds = tr.find('td')
print(tds.find('a').string)
# 或者使用get_text()
# pring(tds.find('a').get_text())
7、综合案例(提取全部的信息,list返回)
position = []
trs = soup.find_all('tr')
for tr in trs:
tds = tr.find_all('td')
post = {}
title = tds[0].find('a').get_text()
type = tds[1].get_text()
num = tds[2].get_text()
city = tds[3].get_text()
public_time = tds[4].get_text()
post['title'] = title
post['type'] = type
post['num'] = num
post['city'] = city
post['public_time'] = public_time
position.append(post)
print(position)
string: 获取某个标签下的非标签字符串
strings: 获取某个标签下子孙非标签的字符串
stripped_strings: 获取某个标签下的子孙非标签字符串,并且会去除空格
get_text():获取某个标签下子孙非标签字符