pyhont---信息的爬取與提取---bs4,BeautifulSoup,re庫 用於對獲取到的頁面文本進行提取
一、BeautifulSoup庫的理解:BeautifulSoup庫是解析、遍歷、維護"標簽樹"的功能庫。
二、BeautifulSoup類的基本元素
1、Tag:標簽,最基本的信息組織單元,分別使用<></>標明開頭和結尾 多個同類標簽只訪問第一個標簽
1)Name:標簽的名字,<p>...</p>的名字是p,格式:<tag>.name
2)Attributes :標簽的屬性,字典形式的組織,格式:<tag>.attrs
3)NavigableString:標簽內非屬性字符串,格式:<tag>.string
4)Comment:標簽內字符串的注釋部分,一種特殊的Comment類型 用.string注釋內容也會顯示
三、基於bs4庫的遍歷HTML方法:下行遍歷,上行遍歷,平行遍歷
1、標簽樹的下行遍歷屬性:
1).contents 子結點的列表,將<tag>的所有兒子節點存入列表
2).children 子節點的迭代類型,與contents類似,用於循環遍歷兒子節點 //只能for,in中
3).descendants 子孫節點的迭代類型,包含所有子孫結點,用於循環遍歷
2、標簽樹的上行遍歷的屬性:
1).parent 節點的父親標簽
2).parents 節點先輩的迭代類型,用於循環遍歷先輩節點
3、標簽的平行遍歷屬性:(平行遍歷發生在同一個父節點下的各節點間)
1).next_sibling 返回按照HTML文本順序的下一個平行節點標簽
2).previous_sibling 回按照HTML文本順序的上一個平行標簽
3).next_siblings 迭代類型,返回按照HTML文本順序的后續所有平行節點標簽
4).previous_siblings 迭代類型,返回按照HTML文本順序的前續所有平行節點標簽
四、如何將HTML友好的顯示:
bs4庫的prettify()方法:
該函數可在HTML每個標簽后加'\n'
該函數也可以應用於tag中
五、信息標記一般類型種類:xml,json,yaml
六、信息提取的一般方法:
1、完整解析信息的標記形式,在提取關鍵信息
2、無視標記形式,直接搜索信息 對信息的文本查找函數即可
融合方法:結合形式解析與搜索方法,提取關鍵字 ...需要標記解析器及文本查找函數
七、beautifulsoup庫對象的查找函數:
1、find_all(name,attrs,recursive,string,**kwargs) 返回一個列表類型,存儲查找的結果
參數:name:對標簽名稱的檢索字符串,可以使用列表查找多個標簽,find_all(true)所有標簽
attrs:對標簽屬性值的檢索字符串,可標注屬性檢索 例如find_all('a','href')
recursive:是否對子孫所有節點搜索,默認值為true,false則值查找當前節點兒子的信息
string:<></>中字符串區域的檢索字符串
<tag>(..)等價於<tag>.find_all(...)
soup(..)等價於soup.find_all(..)
2、拓展方法(參數均與find_all()相同)
find() 搜索且返回一個結果,字符串類型
find_parents() 在先輩節點中搜索,返回一個列表類型
find_parent() 在先輩節點中返回一個結果,字符串類型
find_next_siblings() 在后續平行節點搜索,返回列表類型
find_next_sibling()
find_previous_siblings()
find_previous_sibling() 在前序平行節點中返回一個結果,字符串類型
八、正則表達式:通用的字符串表達框架,判斷某字符串的特征歸屬,用來簡潔表達一組字符串的方式
一般用於表達文本類型特征
同時查找或替換一組字符串
匹配字符串的全部或部分(主要)
九、正則表達式的使用:
編譯:將符合正則表達式語法的字符串轉換正則表達式特征
正則表達式的語法:由字符與操作符組成
十、正則表達式類型
raw string(原生字符串類型:不包含轉義字符的字符串) 表示為 r'text'
string 類型
十一、Re庫 主要用於字符串匹配
十二、Re庫的主要功能函數
re.search(pattern,string,flag=0)在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象
re.match() 在一個字符串的開始位置起匹配正則表達式,返回match對象 注意match為空
re.findall()搜索字符串,一列表類型返回全部能匹配的子串
re.split()將一個字符串按照正則表達式匹配結果進行分割,返回列表類型
re.finditer() 搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
re.sub()在一個字符串中替換所有匹配正則表達式的子串,返回替換后的字符串
re.compile(pattern,flags) 將正則表達式的字符串形式編譯成正則表達式對象
十三、match對象
1、屬性
1)string 待匹配文本
2)re 匹配時使用的pattern對象(正則表達式)
3)pos 正則表達式搜索文本的開始位置
4)endpos 正則表達式搜索文本的結束為止
2、方法
1).group(0) 獲得匹配后的字符串
2).start() 匹配字符串在原始字符串的開始位置
3).end() 匹配字符串在原始字符串的結束位置
4).span() 返回(.start(),.end())元組類型
