一、4种BeautifulSoup库解析器:
BeautifulSoup解析器常配合网络爬虫解析返回的网页文档
1、bs4的HTML解析器:
安装bs4库:pip install bs4
解析用法:BeautifulSoup(mk,‘html.parser’)
2、lxml的HTML解析器:
安装lxml库:pip install lxml:
解析用法:BeautifulSoup(mk,‘lxml’)
3、lxml的XML解析器:
安装lxml库:pip install lxml:
解析用法:BeautifulSoup(mk,‘xml’)
4、html5lib的解析器:
安装html5lib库:pip install html5lib:
解析用法:BeautifulSoup(mk,‘html5lib’)
bs4库BeautifulSoup解析器解析页面示例:
#!/usr/bin/python
# coding = utf-8
from bs4 import BeautifulSoup
import requests
url = ‘https://blog.csdn.net/qq_43054896’
try:
r = requests.get(url)
r.raise_for_status()
# bs4库BeautifulSoup解析返回页面内容
soup = BeautifulSoup(r.text,’html.parser’)
except:
print(‘error’)
二、BeautifulSoup元素的5种基本属性
BeautifulSoup解析器以一对对的标签作为信息元素。
1、tag:标签,最基本的信息组织单元,<>和>标明开头和结尾
1、soup.find_all() 等价于 soup()
2、.find_all(…) 等价于 (…)
2、name:标签的名字,如 < p>…< /p> 的名字为 ‘p’ ,调用格式: p.name
3、attributes:标签属性,字典形式组织,调用格式:p.attrs
4、navigableString:标签内非属性字符串,如 < p>…< /p> 中的字符串,调用格式:p.string
5、comment:标签内字符串注释部分
标签基本属性调用实例:
#!/usr/bin/python
# coding = utf-8
from bs4 import BeautifulSoup
import requests
url = ‘https://blog.csdn.net/qq_43054896’
try:
r = requests.get(url)
r.raise_for_status()
soup = BeautifulSoup(r.text,’html.parser’)
tag = soup(‘a’)[0]
#第一个 ‘a’ 标签的3个基本属性
print(tag)
print(‘name:’, tag.name)
print(‘attributes:’, tag.attrs)
print(‘string:’, tag.string)
except:
print(‘error’)
运行结果:
三、BeautifulSoup对标签树的3种遍历方式
soup = BeautifulSoup(r.text,’html.parser’)
1、下行遍历
所含属性:
(1)tag.contents:子节点列表,将< tag>的所有子节点存入此列表
soup.find(‘head’).contents
(2)tag.children:子节点迭代类型,与.contents类似,用于循环遍历子节点
soup.find(‘head’).children
(3)tag.descendants:子孙节点迭代类型,包含所有子孙节点,用于循环遍历
soup.find(‘head’).descendants
2、上行遍历
所含属性:
(1)tag.parent:节点父标签
soup.find(‘a’).parent
(2)tag.parents:节点先辈标签迭代类型,用于循环遍历先辈节点
soup.find(‘head’).parents
3、平行遍历(只允许在同一个父节点下进行平行遍历)
所含属性:
(1)tag.next_sibling:返回安装HTML文本顺序的下一个平行节点标签
soup.find(‘head’).next_sibling
(2)tag.next_siblings:迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
soup.find(‘head’).next_siblings
(3)tag.previous_sibling:返回按照HTML文本顺序的上一个平行节点标签
soup.find(‘head’).previous_sibling
(4)tag.previous_siblings:迭代类型,返回按照HTML文本顺序的前续所有平行节点的标签
soup.find(‘head’).previous_siblings
四、BeautifulSoup信息检索与提取
soup = BeautifulSoup(r.text,’html.parser’)
soup.find_all(name, attrs, recursive, string, **kwargs)
1、检索方法的参数
(1)name:对标签名称的检索,为str类
soup.find_all(‘a’)
#或
soup.find_all(name =’a’)
(2)attrs:对标签属性值的检索,为str类
(3)recursive:是否对全部子孙检索,默认为True
(4)string:检索标签封装的字符串
soup.find_all(‘a’, string=’周里昂’)
(5)limit :限制返回结果的数量
soup.find_all(‘a’, string=’周里昂’,limit=2)
以下为标签中属性所对应的参数(attrs 键值对中,键单独成为一个参数):
(6)text :检索文档中的字符串内容,接受传值类型:字符串 、正则表达式 、列表、True
soup.find_all(‘a’,text=’周里昂’)
soup.find_all(‘a’,text=[‘周里昂’, ‘ctf’])
(7)id:标签的 ‘id’ 属性
soup.find_all(‘a’, id=’link1′)
(8) class_ :检索指定 CSS 类名的tag,接受传值类型:字符串 、正则表达式 、列表、True、方法
soup.find_all(‘a’, class_=’http://example.com’)
还有一些属性参数省略……
2、检索方法
(1)find_all():检索文档中的所有指定标签,返回一个 list
(2)find():检索指定标签且只返回一个结果,返回一个 str
(3)find_parent():在先辈节点中检索,返回一个 str
(4)find_parents():先辈节点中检索,返回一个 list
(5)find_next_sibling():在后续平行节点中检索,返回一个 str
(6)find_next_siblings():在后续平行节点中检索,返回一个 list
(7)find_previous_sibling():在前序平行节点中检索,返回一个 str
(8)find_previous_siblings():在前序平行节点中检索,返回一个 list