1. BeautifulSoup简称:
bs4
2. 什么是BeautifulSoup?
BeautifulSoup,和lxml一样,是一个html的解释器,主要功能也是解析和提取数据
** 3. 优缺点:**
缺点:效率没有lxml的效率高
优点:接口设计人性化,使用方便
pip install bs4
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.read().decode(), 'lxml')
soup = BeautifulSoup(open('html文件', encoding=''), 'lxml')
HTML文件
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div>
<ul>
<li id="l1">张三li>
<li id="l2">李四li>
<li>王五li>
<a href="" id="" class="a1">bs4的基本使用a>
<span>摆烂span>
ul>
div>
<a href="" title="a2">爬虫a>
<div id="d1">
<span>pythonspan>
div>
<p id="p1" class="p1">python爬虫p>
body>
html>
读取html文件
from bs4 import BeautifulSoup
# 解析本地文件
soup = BeautifulSoup(open('files/bs4的基本使用.html', encoding='utf-8'), 'lxml')
soup.a # 只能找到第一个a
soup.a.name
soup.a.attrs
# 找到的是第一个符合条件的数据
print(soup.a)
# 获取标签属性和属性值
print(soup.a.attrs)
find('a') 只找到第一个a标签
find('a', title='名字')
find('a', class_='名字')
# 返回第一个符合条件的数据
print(soup.find('a'))
# 根据title的值来找到对应的标签对象
print(soup.find('a', title='a2'))
# 根据class的值来找到对应的标签对象 class需要添加下划线_
print(soup.find('a', class_='a1'))
(2).find_all(返回一个列表)
find_all('a') 查找到所有的a
find_all(['a', 'span']) 返回所有的a和span
find_all('a', 'limit=2') 只找前两个a
# 返回的是一个列表,并且返回了所有的a标签
print(soup.find_all('a'))
# 如果想要获取的是多个标签的数据,那么需要在find_all的参数中添加列表数据[]
print(soup.find_all(['a', 'span']))
# 查找前几个数据 limit
print(soup.find_all('li', limit=2))
(3).select(根据选择器得到节点对象)【推荐,但是一般会结合find和find_all使用】
element
eg:p
# select方法返回的是一个列表,并且会返回多个数据
print(soup.select('a'))
.class
eg:.firstname
print(soup.select('.a1'))
#id
eg:#firstname
print(soup.select('#l1'))
[attribute]
eg:li = soup.select('li[class]')
[attribute]
eg:li = soup.select('li[class=""]')
# 查找到li标签中有id的标签
print(soup.select('li[id]'))
# 查找li标签中id为l2的标签
print(soup.select('li[id="l2"]'))
element
div p
element
div > p
element
div, p
eg:soup = soup.select('a, span')
# 后代选择器
# 找到div下面的li
print(soup.select('div li'))
# 子代选择器
# 某一个标签下面的第一级子标签
print(soup.select('div > ul > li'))
# 扎到a标签和li标签的所有对象
print(soup.select('a, li'))
obj.string
obj.get_text()【推荐】
obj = soup.select('#d1')[0]
print(obj.string)
print(obj.get_text())
tag.name 获取标签名
eg:tag = find('li')
print(tag.name)
tag.attrs将属性值作为一个字典返回
obj = soup.select('#p1')[0]
# name是标签的名字
print(obj.name)
# 将属性作为一个字典返回
print(obj.attrs)
obj.attrs.get('title')
obj.get('title')
obj['title']
obj = soup.select('#p1')[0]
print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])