Python爬虫xpath详解
生活随笔
收集整理的這篇文章主要介紹了
Python爬虫xpath详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、xpath介紹
二、安裝lxml
三、xpath解析原理
四、實例化一個etree對象
五、xpath表達式
六、爬蟲實戰
一、xpath介紹
xpath是一門在 XML 文檔中查找信息的語言。最初是用來搜尋 XML 文檔的,但同樣適用于 HTML 文檔的搜索。所以在做爬蟲時完全可以使用 XPath 做相應的信息抽取。
二、安裝lxml
lxml是Python的一個第三方解析庫,支持HTML和XML解析,而且效率非常高,彌補了Python自帶的xml標準庫在XML解析方面的不足。
由于是第三方庫,所以在使用 lxml 之前需要先安裝:pip install lxml
三、xpath解析原理
1.實例化一個etree的對象,且需要將被解析的頁面源碼數據加載到該對象中。
2.調用etree對象中的xpath方法結合著xpath表達式實現標簽的定位和內容的捕獲。
四、實例化一個etree對象
?1.將本地的html文檔中的源碼數據加載到etree對象中:
? ? ? ? etree.parse(filePath)
?2.可以將從互聯網上獲取的源碼數據加載到該對象中
? ? ? ? etree.HTML('page_text')
3.xpath('xpath表達式')
五、xpath表達式
- /:表示的是從根節點開始定位。表示的是一個層級。
- ?//:表示的是多個層級。可以表示從任意位置開始定位。
- ?屬性定位://div[@class='zhang'] tag[@attrName="attrValue"]
- ?索引定位://div[@class="zhang"]/p[3] 索引是從1開始的。
- ? 取文本:/text() 獲取的是標簽中直系的文本內容、//text() 標簽中非直系的文本內容(所有的文本內容)
- ? 取屬性:?/@attrName ? ? ==>img/src
六、爬蟲實戰
爬取二手房信息
import requests from lxml import etree# 使用xpath 爬取二手房信息headers = {'User-Agent' :'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' } url = 'https://bj.58.com/ershoufang/{0}/?PGTID=0d30000c-0000-1bdc-b1e5-d9efea8142e9&ClickID=1' fp = open('58二手房.txt','w',encoding='utf-8') for page in range(1,6):page = str(page)new_url = url.format(page)page_text = requests.get(url=new_url,headers=headers).texttree = etree.HTML(page_text)div_list = tree.xpath('//section[@class="list"]/div')for div in div_list:title = div.xpath('./a//h3/@title')[0]roomsAndHalls = div.xpath('./a//div[@class="property-content-info"]//span/text()')address = div.xpath('./a//div[@class="property-content-info property-content-info-comm"]//span/text()')house_year = div.xpath('./a//span[@class="property-content-info-tag"]/text()')total_price = div.xpath('./a//p[@class="property-price-total"]//span/text()')total_area = div.xpath('./a//p[@class="property-price-average"]//text()')roomsAndHalls = ''.join(roomsAndHalls)address = ''.join(address)house_year = ''.join(house_year)total_price = ''.join(total_price)total_area = ''.join(total_area)# print(title)# print(''.join(roomsAndHalls))# print(''.join(address))# print(''.join(house_year))print(title+'======>'+roomsAndHalls+'======>'+address+'======>'+house_year+'======>'+total_price+'======>'+total_area)fp.write(title+'======>'+roomsAndHalls+'======>'+address+'======>'+house_year+'======>'+total_price+'======>'+total_area+'\n')其實xpath很簡單,只要把表達式理解對就沒啥大問題。詳細代碼:爬蟲源碼
總結
以上是生活随笔為你收集整理的Python爬虫xpath详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇文章教你如何使用python爬虫
- 下一篇: 树莓派使用python+继电器控制220