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"]'))  # 属性选择器
上一篇下一篇

猜你喜欢

热点阅读