山东省城乡与住房建设厅网站首页,可以做试卷的网站,公司平台网站建设,广告策划书1、基本简介
BeautifulSoup简称bs4,BeautifulSoup和lxml一样是一个html的解析器#xff0c;主要功能也是解析和提取数据。
BeautifulSoup和lxml类似#xff0c;既可以解析本地文件也可以响应服务器文件。
缺点#xff1a;效率没有lxml的效率高 。
优点#xff1a;接口设…1、基本简介
BeautifulSoup简称bs4,BeautifulSoup和lxml一样是一个html的解析器主要功能也是解析和提取数据。
BeautifulSoup和lxml类似既可以解析本地文件也可以响应服务器文件。
缺点效率没有lxml的效率高 。
优点接口设计人性化使用方便。
2、安装
pip install bs4
3、基本语法 一、 节点定位 1. 根据标签名查找节点 soup.a 【注】只能找到第一个 a soup.a.name soup.a.attrs 2. 函数 (1).find(返回一个对象 ) find(a)只找到第一个a 标签 find(a, title名字) find(a, class_名字) (2).find_all(返回一个列表 ) find_all(a) 查找到所有的a find_all([a, span]) 返回所有的a 和 span find_all(a, limit2) 只找前两个a (3).select(根据选择器得到节点对象 ) 【推荐】 1.element eg:p 2..class eg:.firstname 3.#id eg:#firstname 4.属性选择器 [attribute] eg:li soup.select(li[class]) [attributevalue] eg:li soup.select(li[classhengheng1]) 5.层级选择器 element element div p elementelement divp element,element div,p eg:soup soup.select(a,span) 二、节点信息 (1). 获取节点内容适用于标签中嵌套标签的结构 obj.string obj.get_text()【推荐】 (2). 节点的属性 tag.name 获取标签名 eg:tag find(li) print(tag.name) tag.attrs将属性值作为一个字典返回 (3). 获取节点属性 obj.attrs.get(title)【常用】 obj.get(title) obj[title] python代码
from bs4 import BeautifulSoup# 通过解析本地文件 对bs4基础语法进行熟悉
# 默认打开的编码格式是gbk 所以在打开文件的时候需要指定编码
soup BeautifulSoup(open(6.html,encodingutf-8),lxml)# 根据标签名查找节点
# 注意找到的是第一个符合条件的信息
print(soup.a)
# attrs 获取标签的属性和属性值
print(soup.a.attrs)# bs4的函数
# (1) find 返回第一个符合条件的数据
print(soup.find(a))
# 根据title找到对应的标签对象
print(soup.find(a,titlea2))
# 根据class的值找到对应的标签对象 注意的是class需要添加下划线
print(soup.find(a,class_a1))# (2) find_all 返回的是一个列表并且返回所有的a标签
print(soup.find_all(a))
# 如果想要获取的是多个标签的数据那么需要在find_all的参数中添加的是列表的数据
print(soup.find_all([a,span]))
# limit的作用是查找前几个数据
print(soup.find_all(li,limit2))# (3) select推荐 返回的是一个列表并且返回多个数据
print(soup.select(a))
# 可以通过 . 代表class 我们把这种操作叫做类选择器
print(soup.select(.a1))
# 可以通过 # 代表id
print(soup.select(#l1))# 属性选择器 通过属性来寻找对应的标签
# 查找到li标签中有id的标签
print(soup.select(li[id]))
# 查找到li标签中id为l2的标签
print(soup.select(li[idl2]))# 层级选择器
# 后代选择器
# 找到的是div下面的li
print(soup.select(div li))# 子代选择器
# 某标签的第一级子标签
# 注意很多的计算机编程语言中不加空格就不会输出内容但是bs4中不会报错会显示内容
print(soup.select(div ul li))
# 找到a标签和li标签的所有的对象
print(soup.select(a,li))# 节点信息
# 获取节点内容
obj soup.select(#d1)[0]
# 如果标签对象中只有内容那么string和get_text()都可以使用
# 如果标签对象中除了内容还有其他标签 那么string就获取不到数据get_text()可以获取到数据
# 一般情况下推荐使用get_text()
print(obj.string)
print(obj.get_text())# 节点的属性
obj soup.select(#p1)[0]
# name是标签的名字
print(obj.name)
# 将属性值作为一个字典返回
print(obj.attrs)# 获取节点的属性
obj soup.select(#p1)[0]
print(obj.attrs.get(class))
print(obj.get(class))
print(obj[class])
4、案例星巴克 需求爬取星巴克官网中的产品名称。 网页中找到星巴克的接口 python代码
import urllib.request
from bs4 import BeautifulSoupurl https://www.starbucks.com.cn/menu/response urllib.request.urlopen(url)content response.read().decode(utf-8)soup BeautifulSoup(content,lxml)# //ul[classgrid padded-3 product]//strong/text()
name_list soup.select(ul[classgrid padded-3 product] strong)for name in name_list:print(name.get_text())