1, 信息標記的目的:
1.1 信息結構增強,信息維度增加;
1.2 信息內容易於通信,存儲,理解,應用;
2,信息標記的三種形式:
2.1 XML:extensible Markup Language,擴展標記語言;
2.1.1 形式:是一種以標簽來標記信息的形式,基於HTML語言后發展出的通用形式;
2.1.2 目的:主要用於Internet上的信息交互與傳遞;
2.1.3 特點:最早的信息標記語言,可擴展性好,但繁瑣;
2.1.4 語法:<name attrs='sth' attrs1='sth'>...NavigibleString...</name>
<!-- comment -->
</name>
2.2 JSON:JavaScript Object Notation,
2.2.1 形式:有類型的鍵值對(用雙引號標記信息類型)構建的信息表達形式;
2.2.2 目的:主要用於移動應用雲端和節點的信息通信,比如程序的接口處理時;
2.2.3 特點:信息有類型,面向對象,有JS語言擴展出的標記形式,適合程序處理,無注釋;
2.2.4 語法:(1) 正常鍵值對 "key" : "value"
(2) 多值鍵值對 "key" : [ "value1" , "value2" ]
(3) 嵌套鍵值對 "key" : { "subkey1":"subvalue1" , "subkey2":"subvalue2" }
鍵常指類的名字,值如果是數字則可以省略雙引號;
2.3 YAML: Ain't Markup Language,無類型鍵值對標記語言;(起初叫做Yet Another Markup Language)
2.3.1 形式:無類型的鍵值對構建信息的表達形式;
2.3.2 目的:用於各類系統的配置文件;
2.3.3 特點:信息無類型,文本信息比例高,有注釋可讀性好;
2.3.4 語法:(1)用縮進格式表達所屬關系:key:
subkey1:subvalue1
subkey2:subvalue2
(2)用並列格式表達並列關系:key:
value1
value2
(3)用 | 表示數據是塊數據,#表示注釋: key :| #comment
.......
3,信息提取的三種一般方法:
3.1 形式解析:完整解析信息的標記形式,再提取關鍵信息;
3.1.1 特點:需要使用標記解析器,例如bs4庫的標簽樹遍歷;
3.2 搜索解析:無視標記信息,直接搜索關鍵信息;
3.2.1 特點:需要使用文本查找函數;
3.3 綜合解析:結合形式解析與搜索解析,再提取關鍵信息;
3.3.1 特點:需要使用標記解析器與文本查找函數;
4,基於bs4庫的HTML內容查找方法:
4.1 soup.find_all(name,attrs,recursive,string,**kwargs)
4.1.1 意義:通過參數 搜索對象中(使用soup變量表示對象)相應的信息,以列表形式返回查找結果;
4.1.2 soup.find_all('name') :以列表形式返回所有的name標簽;
soup.find_all( [ 'name1' , 'name2' ] ) : 以列表形式返回所有的name1標簽和name2標簽;
4.1.3 soup.find_all( 'name','attrs_value') :以列表形式返回name標簽中屬性值包含sttrs_value的所有標簽;
soup.find_all(id='value1') :以列表形式返回id屬性中值為value1的所有標簽;
4.1.4 soup.find_all('name',recursive=True) :默認為True,表示默認對soup對象的子孫節點進行搜索;False表示只搜索soup對象的子節點;
4.1.5 soup.find_all(string="Data") :以列表形式返回包含Data的所有NavigibleString元素;
4.1.6 以下七種擴展方法與soup.find_all()方法具有相同語法:
(1)soup.find() :以字符串形式返回一個搜索結果;
(2)soup.find_parent() :以字符串形式返回一個父輩節點中的搜索結果;
(3)soup.find_next_sibling() :以字符串形式返回一個后序平行節點中的搜索結果;
(4)soup.find_previous_sibling() :以字符串形式返回一個前序平行節點中的搜索結果;
(5)soup.find_parents() :以列表形式返回先輩節點中的所有搜索結果;
(6)soup.find_next_siblings() :以列表形式返回后序平行節點中的所有搜索結果;
(7)soup.find_previous_siblings() :以列表形式返回前序平行節點中的所有搜索結果;
4.1.7 name()等價於name.find_all()
