1.BeautifulSoup下载
pip install BeautifulSoup4 或者 pip install bs4 pip install lxml #解析器
2.BeautifulSoup支持的解析器
解析器 | 使用方法 | 优势 | 劣势 |
python标准解析库 | BeautifulSoup(markup, "html.parser") |
|
|
lxml HTML 解析器 | BeautifulSoup(markup, "lxml") |
|
|
lxml XML 解析器 |
|
|
|
html5lib | BeautifulSoup(markup, "html5lib") |
|
|
3.BeautifulSoup
常用方法
1 soup = BeautifulSoup(目标字符串,'解析器') 2 #根据标签名查找 3 soup.a #只能查找得到第一个符合要求的节点,是一个对象,bs4自己封装类的对象 4 #获取属性 5 soup.a.attrs #获取得到所有属性和值,是一个字典 6 soup.a.attrs['href'] #获取指定的属性值 7 soup.a['href'] #简写形式 8 #获取文本(如果标签里面还有标签,那么string为空) 9 soup.a.string 10 soup.a.text 11 soup.a.get_text() 12 13 #DOM树操作 14 #子节点 15 #.content返回列表 .children返回生成器 16 #所有子孙节点 17 #.descendants生成器 18 #父节点 19 #.parent 20 #全部父节点 21 #.parents生成器 22 #兄弟节点 23 #.next_silbling .previous_silbling 24 #兄弟节点可以理解为和本节点在统一级的节点 25 #全部兄弟节点 26 #.next_silblings .previous_silblings生成器 27 #前后节点 28 #.next_element .previous_element 29 #与兄弟界节点不同,并不针对与兄弟节点,而是再有节点,部分层次 30 31 #find_all方法 32 #返回的是一个列表,列表里面都是节点对象 33 soup.find_all('a')#找到所有a 34 soup.find_all('a', limit=2)# 提取符合要求的前两个a 35 soup.find_all(['a', 'li'])# 查找得到所有的a和li 36 soup.find_all('a', class_='xxx')#查找得到所有class是xxx的a 37 soup.find_all('li', class_=re.compile(r'^xiao'))#查找所有的class以xiao开头的li标签
官方帮助文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/