一,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)