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