數據解析之Xpath解析


一,Xpath基本語法

安裝使用:

1.下載:pip install lxml
2.導包:from lxml import etree

3.將html文檔或者xml文檔轉換成一個etree對象,然后調用對象中的方法查找指定的節點

  2.1 本地文件:tree = etree.parse(文件名)
                tree.xpath("xpath表達式")

  2.2 網絡數據:tree = etree.HTML(網頁內容字符串)
                tree.xpath("xpath表達式")
安裝xpath插件在瀏覽器中對xpath表達式進行驗證:可以在插件中直接執行xpath表達式
將xpath插件拖動到谷歌瀏覽器拓展程序(更多工具)中,安裝成功

啟動和關閉插件 ctrl + shift + x

測試頁面數據

<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>測試bs4</title>
</head>
<body>
    <div>
        <p>百里守約</p>
    </div>
    <div class="song">
        <p>李清照</p>
        <p>王安石</p>
        <p>蘇軾</p>
        <p>柳宗元</p>
        <a href="http://www.song.com/" title="趙匡胤" target="_self">
            <span>this is span</span>
        宋朝是最強大的王朝,不是軍隊的強大,而是經濟很強大,國民都很有錢</a>
        <a href="" class="du">總為浮雲能蔽日,長安不見使人愁</a>
        <img src="http://www.baidu.com/meinv.jpg" alt="" />
    </div>
    <div class="tang">
        <ul>
            <li><a href="http://www.baidu.com" title="qing">清明時節雨紛紛,路上行人欲斷魂,借問酒家何處有,牧童遙指杏花村</a></li>
            <li><a href="http://www.163.com" title="qin">秦時明月漢時關,萬里長征人未還,但使龍城飛將在,不教胡馬度陰山</a></li>
            <li><a href="http://www.126.com" alt="qi">岐王宅里尋常見,崔九堂前幾度聞,正是江南好風景,落花時節又逢君</a></li>
            <li><a href="http://www.sina.com" class="du">杜甫</a></li>
            <li><a href="http://www.dudu.com" class="du">杜牧</a></li>
            <li><b>杜小月</b></li>
            <li><i>度蜜月</i></li>
            <li><a href="http://www.haha.com" id="feng">鳳凰台上鳳凰游,鳳去台空江自流,吳宮花草埋幽徑,晉代衣冠成古丘</a></li>
        </ul>
    </div>
</body>
</html>

xpath表達式:

/  代表一個
// 代表所有

屬性定位:
    #找到class屬性值為song的div標簽
    //div[@class="song"] 
層級&索引定位:
    #找到class屬性值為tang的div的直系子標簽ul下的第二個子標簽li下的直系子標簽a
    //div[@class="tang"]/ul/li[2]/a
邏輯運算:
    #找到href屬性值為空且class屬性值為du的a標簽
    //a[@href="" and @class="du"]
模糊匹配:
    //div[contains(@class, "ng")]
    //div[starts-with(@class, "ta")]
取文本:
    # /表示獲取某個標簽下的文本內容
    # //表示獲取某個標簽下的文本內容和所有子標簽下的文本內容
    //div[@class="song"]/p[1]/text()
    //div[@class="tang"]//text()
取屬性:
    //div[@class="tang"]//li[2]/a/@href

二 ,獲取boss直聘中的職位信息

import requests
import json
from lxml import etree

url = "https://www.zhipin.com/c101010100-p100109/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
}

page_text = requests.get(url=url, headers=headers, proxies={"https":"106.12.32.43:3128"}).text
tree = etree.HTML(page_text)

li_list = tree.xpath("//div[@class='job-list']/ul/li")
job_list = []
for li in li_list:
    job_url = "https://www.zhipin.com" + li.xpath("./div/div[1]/h3/a/@href")[0]
    print(job_url)
    page_text = requests.get(url=job_url, headers=headers, proxies={"https":"106.12.32.43:3128"}).text
    tree = etree.HTML(page_text)
    company_name = tree.xpath("//*[@id='main']/div[1]/div/div/div[3]/h3/a/text()")[0]
    salary = tree.xpath("//*[@id='main']/div[1]/div/div/div[2]/div[2]/span/text()")[0]
    job_info = {
        "company_name": company_name,
        "salary": salary
    }
    job_list.append(job_info)
    print(company_name + "下載完成")

f = open("job.html", "w", encoding="utf-8") 
json.dump(job_list, f)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM