form bs4 import BeautifulSoup #引入包
使用方式:可以将一个html文档,转化为指定的对象,然后通过对象的方法或属性去查找指定的内容。
(1)转化本地文件:
soup = BeautifulSoup(open(‘本地文件‘),‘lxml‘) #lxml是解析器
(2)转化网络文件:
soup = BeautifulSoup(open(‘字符串类型或者字节类型‘),‘lxml‘)
实操:
#生成对象
soup = BeautifulSoup(open(‘soup_text.html‘,encoding=‘utf8),‘lxml‘)
(1)根据标签名查找:
#查找对象里的a标签,这种方法只能找到第1个符合要求的标签
print(soup.a)
(2)获取属性:
print(soup.a[‘href‘])
print(soup.a[‘href‘])
print(soup.a[‘title‘])
print(soup.a[‘target‘])
#打印a标签所有属性,并返回一个字典
print(soup.a.attrs)
(3)获取内容:
#打印a标签里的文本
print(soup.a.text)
print(soup.a.text)
print(soup.a.string)
print(soup.a.get_text())
三者的区别为:如果标签里还有标签,string获取结果为None,其他两个方法可以获取内容
(4)find
#找第1个符合要求的a
soup.find(‘a‘)
#查找title = ‘qin‘ 的a标签
soup.find(‘a‘, title = ‘qin‘)
#查找alt = ‘qi‘ 的a标签
soup.find(‘a‘, alt = ‘qi‘)
#注意,当用class查找时,格式为class_ ,因为class是关键字,无法直接使用
soup.find(‘a‘, class_ = ‘abcd‘)
#先找到class = ‘tang‘ 的div,再通过这个div找到class = ‘du‘的a标签,此时找到的a标签是这个div里的第1个a标签
div = soup.find(‘div‘, class_ = ‘tang‘)
div.find(‘a‘, class_ = ‘du‘)
(5)find_all
#查找所有的a标签,返回一个列表
list = soup.find_all(‘a‘)
#查找calss = ‘tang‘ 的div 里面所有的a标签
div = soup.find(‘div‘ , class_ = ‘tang‘)
div.find_all(‘a‘)
#查找calss = ‘tang‘ 的div 里面所有的a标签和b标签
div = soup.find(‘div‘ , class_ = ‘tang‘)
div.find_all([‘a’,‘b‘])
#查找calss = ‘tang‘ 的div 里面前2个a标签
div = soup.find(‘div‘ , class_ = ‘tang‘)
div.find_all(‘a‘, limit = 2)
(6)select
根据选择器选择指定的内容:a 标签选择器,.dudu类选择器,#lala id选择器,a,.dudu #lala 组合选择器,
div .dudu #lala .meme 层级选择器,只要是子级就可以选择
div > p > a > .dudu 只能是儿子才能选择
#查找层级下面所有的a,返回1个列表
soup.select(‘.tang > ul > li > a‘)
#查找层级里下标为2的a标签
soup.select(‘.tang > ul > li > a‘)[2]
#查找层级里下标为2的a标签里的内容
soup.select(‘.tang > ul > li > a‘)[2].text
#查找层级里下标为2的a标签里的href属性
soup.select(‘.tang > ul > li > a‘)[2][‘href‘]
新手学习,如果错漏,望指正!!!
原文:https://www.cnblogs.com/xclzdjj/p/11623945.html