1. 程式人生 > >Python 網路爬蟲筆記4 -- 資訊標記與提取

Python 網路爬蟲筆記4 -- 資訊標記與提取

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()引數