4. bs4
2018-10-31 本文已影响0人
学飞的小鸡
from bs4 import BeautifulSoup
# 1. 把html字符串初始化成一个BeautifulSoup对象
soup = BeautifulSoup(open('./soup_test.html', encoding='utf-8'), 'lxml')
# 参数1 , 一个html字符串 参数2, 是一个解析器(bs4没有自己的解析器,如果加入其它解析器,可以提高其解析效率)
# print(soup)
# 1. 根据标签名来查找对象,这种方法返回的是这类标签的第一个
print(soup.title)
print(soup.li)
# 2. 获取标签中的内容
obj = soup.a
print(obj.string) # 获取页面中的字符串,包括被注释掉的,如果string有多个子节点,无法获取
# 解决方法
print(obj.get_text()) # 获取当前标签中的字符串(包括所有的后代标签中的字符串,无法获取注释掉的内容)
# 3.获取属性
print(obj.get('title')) # 用get方法获取
print(obj['href']) # 字典值获取
print(obj.attrs) # 获取标签的所有属性(得到一个字典)
print(obj.name) # 获取标签的名字
# 4. 获取子节点
print(soup.body.children) # 迭代器对象 <list_iterator object at 0x000001E2566A7B70>
# 获取直接子节点
for child in soup.body.children:
print('----------')
print(child)
# print(soup.body.descendants) # 生成器 <generator object descendants at 0x0000020CD15999E8>
# # 获取当前节点的所有后代节点
# for i in soup.body.descendants:
# print('########')
# print(i)
# 5. 根据相关函数来查找节点
# 1> find函数, 返回一个对象
print('----')
print(soup.find('a')) # 寻找第一个a标签
print(soup.find('a',id = 'hong')) #
# 2> find_all函数,返回的是一个列表
print(soup.find_all('a'))
print(soup.find_all(['a', 'span', 'li']))
print(soup.find_all(['a', 'span', 'li'], class_='taohua'))
print(soup.find_all(['a', 'span', 'li'], limit=3))
# 3> select 函数, 根据css选择器来查找
print(soup.select('.taohua'))
print(soup.select('.tang ul li')) # 派生选择器
print(soup.select('a#hong')) # 组合选择器 查找a中id等于hong
print(soup.select('[name="he"]')) # 属性选择器