Python爬虫之BeautifulSoup
时间:2022-10-02 00:00:01
目录
- BeautifulSoup介绍
- BeautifulSoup安装
- 使用
- 简单使用
- 标签选择器
- 获取整个标签,包括内容和标签本身
- 获取标签名称
- 获取标签属性
- 获取标签内容
- 获取嵌套标签
- 获取子节点
- 获取列表形式
- 获取迭代器形式
- 获取所有子孙节点
- 获取父节点
- 获取祖先节点
- 获取兄弟节点
- 标准选择器
- 通过标签名(name) 查找
- 通过属性(attrs)查找
- 搜索传入式选择器
- 通过内容(text)选择
- 通过css样式选择
- select 获取标签
- 总结:
BeautifulSoup介绍
Beautiful Soup是python库的主要功能是从网页上捕获数据。官方解释如下:
Beautiful Soup提供一些简单的,python该函数用于处理导航、搜索、修改分析树等功能。它是一个工具箱,通过分析文档为用户提供需要捕获的数据,因为它很简单,所以写一个完整的应用程序不需要太多的代码。Beautiful Soup输入文档自动转换为输入文档Unicode编码,输出文档转换为utf-8编码。除非文档没有指定编码方法,否则不需要考虑编码方法,Beautiful Soup编码方法无法自动识别。
BeautifulSoup安装
- 安装BeautifulSoup
Beautiful Soup 3 已停止开发,建议在当前项目中使用Beautiful Soup 但是它已经移植到了BS也就是说,我们需要导入 import bs4 。
pip install beautifulsoup4
- 安装lxml解析器
Beautiful Soup支持Python标准库中的HTML如果我们不安装它,分析器还支持一些第三方分析器 Python 会使用 Python默认分析器,lxml 建议安装分析器更强、更快。
pip install lxml
使用
简单使用
import requests from bs4 import BeautifulSoup html = requests.get("https://book.douban.com").text #获取html代码 soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象 soup.prettify() #自动补充缺省html代码 print(soup.title.string) #获取title内容
豆瓣读书
标签选择器
获取整个标签,包括内容和标签本身
获得标签时,返回第一个标签
import requests from bs4 import BeautifulSoup html = requests.get("https://book.douban.com").text #获取html代码 soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象 soup.prettify() #自动补充缺省html代码 print(soup.title) #获取title标签 print(type(soup.title)) #查看soup.title返回的类型 print(soup.head) #获取head标签 print(soup.p) #获取p标签
豆瓣读书 豆瓣读书
豆瓣
获取标签名字
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.title.name) #获取title内容
title
获取标签属性
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.a['href']) #获取title内容
https://www.douban.com/accounts/login?source=book
获取标签内容
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.a.string) #获取a内容
登录
嵌套标签获取
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.head.title.string) #获取a内容
豆瓣读书
获取子节点
列表形式获取
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.p.contents) #获取子节点
['登录']
迭代器形式获取
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.p.children) #获取子节点
for i,child in enumerate (soup.p.children):
print(i,child)
0 豆瓣
获取所有子孙节点
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.p.descendants) #获取子孙节点
for i,child in enumerate (soup.p.descendants):
print(i,child)
0 豆瓣
获取父节点
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
print(soup.a.parent) #获取a的父标签
获取祖先节点
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
# soup.prettify() #自动补全缺省的html代码
# for i,child in enumerate (soup.a.parents):
# print(i,child)
获取兄弟节点
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
for i,child in enumerate (soup.a.next_siblings): #获取下面的兄弟节点
print(i,child)
for i,child in enumerate (soup.a.previous_siblings):#获取上面的兄弟节点
print(i,child)
0
1 注册
2
0
标准选择器
可以根据标签 内容,属性查找
原型:
find_all(name,attrs,recursive,text,**kwargs)
通过标签名(name) 查找
import requests
from bs4 import BeautifulSoup
html = requests.get("https://book.douban.com").text #获取html代码
soup=BeautifulSoup(html,'lxml') #使用lxml解析器生成soup对象
soup.prettify() #自动补全缺省的html代码
# print(soup.find_all('ul'))
for ul in soup.find_all('ul'):
print(ul.find_all('li'))
[
豆瓣
,
读书
,
电影
,
音乐
,
同城
,
小组
,
阅读
,
FM
,
时间
,
豆品
,
更多
]
[购书单
, 电子图书
, 豆瓣书店
, 2017年度榜单
, 2017读书报告
, 购物车
]
[
推荐
,
推荐
,
推荐
,
推荐
,
推荐
,
,
,
,
,
]
[
,
,
,
,
,
,
,
,
,
]
[
,
,
相关文章