什麼是xpath
- XPath即爲XML路徑語言(XML Path Language),它是一種用來在XML文檔中查找信息的語言,可用來在 XML文檔中對元素和屬性進行搜索,同樣也適用於HTML。
什麼是xml?
- XML 是一種標記語言,很類似 HTML
- XML 的設計宗旨是傳輸數據,而非顯示數據
- XML 的標籤需要我們自行定義。
XML 和 HTML 的區別
數據格式 | 描述 | 數據目標 |
---|---|---|
XML | Extensible Markup Language (可擴展標記語言) | 被設計爲傳輸和存儲數據,其焦點是數據的內容。 |
HTML | HyperText Markup Language (超文本標記語言) | 顯示數據以及如何更好顯示數據。 |
HTML DOM | Document Object Model for HTML (文檔對象模型) | 通過 HTML DOM,可以訪問所有的 HTML 元素,連同它們所包含的文本和屬性。可以對其中的內容進行修改和刪除,同時也可以創建新的元素。 |
常用的路徑表達式
表達式 | 描述 |
---|---|
nodename | 選取此節點的所有子節點。 |
/ | 從根節點選取。 |
// | 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 |
. | 選取當前節點。。 |
. . | 選取當前節點的父節點。 |
@ | 選取屬性。 |
選取未知節點
XPath 通配符可用來選取未知的 XML 元素。
通配符 | 描述 |
---|---|
* | 匹配任何元素節點。 |
@* | 匹配任何屬性節點。 |
node() | 匹配任何類型的節點。 |
xpath的使用
安裝xpath
pip install lxml
案例:
#pip install lxml
from lxml.html import etree
import requests
class CollegateRank(object):
def get_page_data(self,url):
response = self.send_request(url=url)
if response:
# print(response)
with open('page.html','w',encoding='gbk') as file:
file.write(response)
self.parse_page_data(response)
def parse_page_data(self,response):
#使用xpath解析數據
etree_xpath = etree.HTML(response)
ranks = etree_xpath.xpath('//div[@class="scores_List"]/dl')
# print(ranks)
for dl in ranks:
school_info = {}
school_info['url'] = self.extract_first(dl.xpath('./dt/a[1]/@href'))
school_info['icon'] = self.extract_first(dl.xpath('./dt/a[1]/img/@src'))
school_info['name'] = self.extract_first(dl.xpath('./dt/strong/a/text()'))
school_info['adress'] = self.extract_first(dl.xpath('./dd/ul/li[1]/text()'))
school_info['tese'] = '、'.join(dl.xpath('./dd/ul/li[2]/span/text()'))
school_info['type'] = self.extract_first(dl.xpath('./dd/ul/li[3]/text()'))
school_info['belong'] = self.extract_first(dl.xpath('./dd/ul/li[4]/text()'))
school_info['level'] = self.extract_first(dl.xpath('./dd/ul/li[5]/text()'))
school_info['weburl'] = self.extract_first(dl.xpath('./dd/ul/li[6]/text()'))
print(school_info)
def extract_first(self,data=None,defalut=None):
if len(data) > 0:
return data[0]
return defalut
def send_request(self, url, headers=None):
headers = headers if headers else {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}
response = requests.get(url=url,headers=headers)
if response.status_code == 200:
return response.text
if __name__ == '__main__':
url = 'http://college.gaokao.com/schlist/'
obj = CollegateRank()
obj.get_page_data(url)