Python 網路爬蟲筆記4 -- 資訊標記與提取
阿新 • • 發佈:2018-12-19
Python 網路爬蟲筆記4 – 資訊標記與提取
Python 網路爬蟲系列筆記是筆者在學習嵩天老師的《Python網路爬蟲與資訊提取》課程及筆者實踐網路爬蟲的筆記。
一、資訊標記
1、XML:標籤
- 標籤格式:< name> … < /name>
- 空標籤:< name />
- 註釋:<!‐‐ ‐‐>
<person> <firstName>Tian</firstName> <lastName>Song</lastName> <address> <streetAddr>中關村南大街5號</streetAddr> <city>北京市</city> <zipcode>100081</zipcode> </address> <prof>Computer System</prof><prof>Security</prof> </person>
2、JSON:有型別的鍵值對key:value
- 鍵值對單個值:“key” : “value”
- 鍵值對多個值:“key” : [“value1”, “value2”]
- 巢狀鍵值對:“key” : {“subkey” : “subvalue”}
{ “firstName” : “Tian” , “lastName” : “Song” , “address” : { “streetAddr” : “中關村南大街5號” , “city” : “北京市” , “zipcode” : “100081” } , “prof” : [ “Computer System” , “Security” ] }
3、YAML:無型別鍵值對key:value
- 鍵值對單個值:key : value
- 鍵值對多個值: key : #Comment ‐value1 ‐value2
- 巢狀鍵值對: key : subkey : subvalue
firstName : Tian
lastName : Song
address :
streetAddr : 中關村南大街5號
city : 北京市
zipcode : 100081
prof :
‐Computer System
‐Security
二、資訊提取
1、資訊提取一般方法
形式解析: 完整解析資訊的標記形式,再提取關鍵資訊 優點:資訊解析準確 缺點:提取過程繁瑣,速度慢
搜尋: 無視標記形式,直接搜尋關鍵資訊 優點:提取過程簡潔,速度較快 缺點:提取結果準確性與資訊內容相關
融合方法: 結合形式解析與搜尋方法,提取關鍵資訊
2、基礎查詢方法:find_all
函式原型:
find_all(name, attrs, recursive, string, **kwargs)
引數:
- name:要檢索標籤的名稱字串
- attrs:要檢索標籤屬性值的字串,可標註屬性檢索
- recursive:是否對子孫全部檢索,預設True
- string:<>…</>中字串區域的檢索字串
- **kwargs:可選引數
返回: 檢索結果的列表
例項:
import requests
from bs4 import BeautifulSoup
def html_search():
"""
檢索 HTML 內容,提取資訊
:return:
"""
html = requests.get('https://python123.io/ws/demo.html')
soup = BeautifulSoup(html.text, 'html.parser')
# 檢索標籤
print(soup.find_all('a'))
print(soup.find_all(['a', 'b']))
# 檢索標籤屬性
print(soup.find_all('p', 'course'))
print(soup.find_all(id='link1'))
# 檢索字串
print(soup.find_all(string='python'))
if __name__ == '__main__':
print('running bs:')
html_search()
< tag>(…) 等價於< tag>.find_all(…) soup(…) 等價於soup.find_all(…)
3、其它查詢方法
方法 | 說明 |
---|---|
<>.find() | 搜尋且只返回一個結果,同.find_all()引數 |
<>.find_parents() | 在先輩節點中搜索,返回列表型別,同.find_all()引數 |
<>.find_parent() | 在先輩節點中返回一個結果,同.find()引數 |
<>.find_next_siblings() | 在後續平行節點中搜索,返回列表型別,同.find_all()引數 |
<>.find_next_sibling() | 在後續平行節點中返回一個結果,同.find()引數 |
<>.find_previous_siblings() | 在前序平行節點中搜索,返回列表型別,同.find_all()引數 |
<>.find_previous_sibling() | 在前序平行節點中返回一個結果,同.find()引數 |