您好,登錄后才能下訂單哦!
小編給大家分享一下關于xpath網頁解析神器的介紹,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
使用XPath提取貓眼電影排行榜前100名。https://maoyan.com/board/4
XML介紹
XML稱為可擴展標記語言,XML是互聯網數據傳輸的重要工具,它可以跨越互聯網任何的平臺,不受編程語言和操作系統的限制,可以說它是一個擁有互聯網最高級別通行證的數據攜帶者。非常類似HTML。
HTML 和 XML的區別在于HTML主要用來顯示數據,XML是用來傳輸數據。
XML都是標簽閉合的。例如: … 成對出現。
<?xml version="1.0" encoding="utf-8"?> <bookstore> <book category="奇幻"> <title>冰與火之歌</title> <author>喬治 馬丁</author> <year>2005</year> <price>365.00</price> </book> <book category="童話"> <title>哈利波特與死亡圣器</title> <author>J K. 羅琳</author> <year>2005</year> <price>48.98</price> </book> <book category="編程"> <title>Python編程-從入門到放棄</title> <author>挖掘機小王子</author> <year>2048</year> <price>99.00</price> </book> <book category="web" cover="paperback"> <title>Python編程-從看懂到看開</title> <author>尼古拉斯-趙四</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
在上面的xml
語法中存在父子,先輩等關系。
XPath介紹
XPath (XML Path Language) 是一門在 XML 文檔中查找信息的語言,可用來在 XML/HTML 文檔中對元素和屬性進行遍歷,并提取相應元素。
也是一種數據提取方式,只不過針對的是HTML/XML數據,因為爬蟲主要和HTML頁面打交道。
XPath匹配規則
下表是XPath常用的規則:
lxml庫
lxml 是一個Python第三方模塊。主要的功能是如何解析和提取 HTML/XML 數據。
lxml和正則類似,是一款高性能的 Python HTML/XML 解析器,我們可以利用之前學習的XPath語法,來快速的定位特定元素以及節點信息。
pip install lxml
失敗的話指定下載源用 pip install lxml -i https://pypi.douban.com/simple 豆瓣源
再安裝 parsel 時會自動安裝 lxml,這里就不需要再次安裝了。
使用lxml模塊
初始化生成一個XPath解析對象,同時可以自動補全殘缺的HTML標簽。傳入網頁源碼。
from lxml import etree string = """ <book category="web" cover="paperback"> <title>Python編程-從看懂到看開</title> <author>Python編程</author> <year>2003</year> <price>39.95</price> </book> """ # 再解析之前必須先轉化一下 html = etree.HTML(string) # 返回結果是列表 result = html.xpath("//book[contains(@cover,'paper')]/title/text()") result = html.xpath("//book[4]/title/text()") print(result)
因為 parsel
對 lxml
進行了, 所以可以直接再 parsel 中無縫切換使用 xpath 。
使用XPath選取指定內容。括號里面書寫XPath語法規則。返回列表。
# -*- coding: utf-8 -*- import requests import parsel headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36' } response = requests.get('https://maoyan.com/board/4?offset=0', headers=headers) html = response.text # %% 選擇任意節點 sel = parsel.Selector(html) # 提取 p 標簽 ps = sel.xpath('//p') for p in ps: print(p.get())
''' 貓眼電影: https://maoyan.com/board/4?offset=20 函數式: 1. 獲取(請求)一頁的函數 2. 定義解析函數(解析一頁) 3. 寫入文件函數 4. 循環函數 5. python學習交流群:695185429 ''' import json import requests from lxml import etree # 獲取響應 def getOnePage(url): '''獲取一頁的響應的函數''' response = requests.get(url) return response.text # 解析響應 --> 結果 def parseOnePage(text): # 初始化解析 html = etree.HTML(text) # 里面有所有的數據 先選擇上一層 這一層里面包含所有數據 然后循環遍歷 data = html.xpath('//dl[@class="board-wrapper"]') # 遍歷提取所有的元素 for dat in data: print(dat) # 繼續選取 # 標題 title = dat.xpath('.//div//a/text()') # 主演 star = dat.xpath('.//p[@class="star"]/text()') # 時間 releasetime = dat.xpath('//p[@class="releasetime"]/text()') for tit, sta, rel in zip(title, star, releasetime): # 在函數里面遇到return就終止 # 生成器 yield { '電影名字': tit, '主演': sta.strip(), '上映時間': rel } def save2File(data): # with open('maoyan66.txt', 'a', encoding='utf-8') as fp: # fp.write(data+'\n') with open('maoyan66.txt', 'a', encoding='utf-8') as fp: fp.write(json.dumps(data, ensure_ascii=False)+'\n') if __name__ == "__main__": for page in range(10): # 一頁網址 url = f'https://maoyan.com/board/4?offset={page*10}' # 調用 r = getOnePage(url) # 解析數據 返回生成器 result = parseOnePage(r) for res in result: # with open('maoyan.txt','a',encoding='utf-8') as fp: # # 打印到文件 # print(str(res), file=fp) save2File(str(res))
看完了這篇文章,相信你對關于xpath網頁解析神器的介紹有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。