Python爬虫-BeautifulSoup库详解

BeautifulSoup简介

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
安装:pip3 install BeautifulSoup4

用法

1.基本用法

from bs4 import BeautifulSoup
bs = BeautifulSoup(html,"html.parser") # 缩进格式
print(bs.prettify()) # 格式化html结构
print(bs.title) # 获取title标签的名称
print(bs.title.name) # 获取title的name
print(bs.title.string) # 获取head标签的所有内容
print(bs.head) 
print(bs.div)  # 获取第一个div标签中的所有内容
print(bs.div["id"]) # 获取第一个div标签的id的值
print(bs.a) # 获取第一个a标签中的所有内容
print(bs.find_all("a")) # 获取所有的a标签
print(bs.find(id="u1")) # 获取id="u1"
for item in bs.find_all("a"): 
    print(item.get("href")) # 获取所有的a标签,并遍历打印a标签中的href的值
for item in bs.find_all("a"): 
    print(item.get_text())

2.选择元素

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.title)
print(type(soup.title))
print(soup.head)
print(soup.p)
#获取名称
print(soup.title.name)
print(soup.p.attrs['name'])
print(soup.p['name'])
#获取内容
print(soup.p.string)
#获取子孙节点
print(soup.p.children)
for i, child in enumerate(soup.p.children):
    print(i, child)

3.find_all()

find_all( name , attrs , recursive , text , **kwargs )
可根据标签名、属性、内容查找文档,返回所有符合条件的内容
#通过标签
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find_all('ul'))
print(type(soup.find_all('ul')[0]))
#通过属性
print(soup.find_all(attrs={'id': 'list-1'}))
print(soup.find_all(attrs={'name': 'elements'}))
print(soup.find_all(id='list-1'))
print(soup.find_all(class_='element'))
#通过text
print(soup.find_all(text='Foo'))

3.find()

find( name , attrs , recursive , text , **kwargs )
find返回单个元素,find_all返回所有元素

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find('ul'))
print(type(soup.find('ul')))
print(soup.find('page'))

find_parents() # 返回所有祖先节点
find_parent() # 返回直接父节点

find_next_siblings()返回后面所有兄弟节点
find_next_sibling()返回后面第一个兄弟节点


find_previous_siblings()返回前面所有兄弟节点
find_previous_sibling()返回前面第一个兄弟节点

find_all_next()返回节点后所有符合条件的节点
find_next()返回第一个符合条件的节点

find_all_previous()返回节点后所有符合条件的节点
find_previous()返回第一个符合条件的节点

5.css选择--通过select()直接传入CSS选择器即可完成选择

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.select('.panel .panel-heading'))
print(soup.select('ul li'))
print(soup.select('#list-2 .element'))
print(type(soup.select('ul')[0]))

for ul in soup.select('ul'):
    print(ul.select('li'))
#获得属性
for ul in soup.select('ul'):
    print(ul['id'])
    print(ul.attrs['id'])
#获取内容
for li in soup.select('li'):
    print(li.get_text())
引用
BeautifulSoup库详解(个人整理)
Python中BeautifulSoup库的用法
Beautiful Soup 4.4.0 文档

你可能感兴趣的:(Python爬虫-BeautifulSoup库详解)