爬虫架构-bs4
方便解析Html、xml等格式的源码,快速查询、修改等操作,节省数小时乃至更多的工作时间
官网文档
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
from bs4 import BeautifulSoup
print('path-',BeautifulSoup)
path- <class 'bs4.BeautifulSoup'>
html源代码
非真实网页
html_doc = '<html><head><title>我是哥,你是啥</title></head><body><a id="baidu">百度</a><a class="ali">阿里</a><p>夏日炎炎,要你干嘛</p></body></html>'
BS类解析html源码,使用解析器
解析器:
-
html.parser
-
html5lib
-
…
soup = BeautifulSoup(html_doc,'html5lib')
print(soup.title)
<title>我是哥,你是啥</title>
一、对象的种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .
soup.tagname
print(type(soup.title))
<class 'bs4.element.Tag'>
print(soup.head)
print(soup.p)
print(soup.a)
<head><title>我是哥,你是啥</title></head>
<p>夏日炎炎,要你干嘛</p>
<a id="baidu">百度</a>
soup.tagname.string | soup.tagname.text
-
作用:获取标签内部的文本
-
string 只可以获取一个子节点文本
-
text 可以获取多个子节点文本
print(soup.head.string)
print(soup.p.text)
print(soup.a.text)
我是哥,你是啥
夏日炎炎,要你干嘛
百度
soup.tagname.attrs属性
- 作用:查看标签的属性集合的结构,可以使用字典的方式获取属性的值
- attrs[key]
- get(key)
print(soup.a.attrs)
print(soup.a.attrs['id'])
print(soup.a.get('id'))
{'id': 'baidu'}
baidu
baidu
二、高级查询方式
可以通过查询函数获取单个及多个满足条件的标签
- find_all() 查询函所有满足条件的标签,返回列表[tag,tag,…]
- find()
- select()
- select_one()
a_list = soup.find_all(name="a")
print(a_list)
a_list = soup.find_all(name=['a','p'])
print(a_list)
a_list = soup.find_all(name="a",attrs={'id':'link1'}) #选择返回的属性
print(a_list)
a_list = soup.find_all(name="a",limit=1) #返回列表的长度:1
print(a_list)
a_list = soup.find(name="a",attrs={'id':'link1'}) # 返回标签
print(a_list)
css语法选择器
tag 标签选择 tagname{}
class类型选择 .class{}
id选择 #id{}
派生语法 tag\id\class
a_list = soup.select("a")
print(a_list)
a_list = soup.select("a#baidu")
print(a_list)
a_list = soup.select("a.ali")
print(a_list)
a_list = soup.select("body #baidu")
print(a_list)
[<a id="baidu">百度</a>, <a class="ali">阿里</a>]
[<a id="baidu">百度</a>]
[<a class="ali">阿里</a>]
[<a id="baidu">百度</a>]