Xpath表達(dá)式及簡(jiǎn)單應(yīng)用

一、常用xpath表達(dá)式

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

# 提取div里的所有文字捆姜,深層嵌套的全部文字
data = selector.xpath('//div[@id="test3"]')[0]
info = data.xpath('string(.)')
  • 取屬性:
//div[@class="music"]//li[2]/a/@href

二、python使用xpath表達(dá)式的步驟

1.下載:pip install lxml
2.導(dǎo)包:from lxml import etree
3.將html文檔或者xml文檔轉(zhuǎn)換成一個(gè)etree對(duì)象迎膜,然后調(diào)用對(duì)象中的方法查找指定的節(jié)點(diǎn)
  3.1 本地文件:tree = etree.parse(文件名)
                tree.xpath("xpath表達(dá)式")
  3.2 網(wǎng)絡(luò)數(shù)據(jù):tree = etree.HTML(網(wǎng)頁(yè)內(nèi)容字符串)
                tree.xpath("xpath表達(dá)式")

三泥技、案例

import requests
from lxml import etree

url = 'http://www.haoduanzi.com/category-10_2.html'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
url_content = requests.get(url, headers=headers).text
# 使用xpath對(duì)url_conten進(jìn)行解析
# 使用xpath解析從網(wǎng)絡(luò)上獲取的數(shù)據(jù)
tree = etree.HTML(url_content)
# 解析獲取當(dāng)頁(yè)所有段子的標(biāo)題
title_list = tree.xpath('//div[@class="log cate10 auth1"]/h3/a/text()')

ele_div_list = tree.xpath('//div[@class="log cate10 auth1"]')

text_list = []  # 存儲(chǔ)段子的文本內(nèi)容
for ele in ele_div_list:
    # 段子的文本內(nèi)容
    text_list = ele.xpath('./div[@class="cont"]//text()')
    # list列表中的文本內(nèi)容全部提取到一個(gè)字符串中
    text_str = str(text_list)
    # 字符串形式的文本內(nèi)容放置到text_list列表中
    text_list.append(text_str)
print(title_list)
print(text_list)
  • 案例二:爬取boss直聘的崗位信息
import requests
from lxml import etree


job = input('enter a job:')
url = 'https://www.zhipin.com/job_detail/?'
param = {
    'query': job
}
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'
}


response = requests.get(url=url, params=param, headers=headers)
page_text = response.text  # (【1磕仅,獲取網(wǎng)絡(luò)頁(yè)面】)

# 解析:
# 1.獲取所有崗位的鏈接(【2珊豹,將網(wǎng)頁(yè)html實(shí)例化成一個(gè)tree對(duì)象】)
tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="job-list"]/ul/li')  # (【3,用tree.xpath方法解析篩選想要的部分】)
# 只用Element類型的對(duì)象可以調(diào)用xpath方法
for li in li_list:
    job_url = li.xpath("./div/div[1]/h3/a/@href")[0]  # .li對(duì)象表示的局部頁(yè)面內(nèi)容
    job_url = "https://www.zhipin.com" + job_url

    # 對(duì)job_url發(fā)起請(qǐng)求榕订,獲取崗位對(duì)應(yīng)的詳情頁(yè)面(又重新獲取一個(gè)新的網(wǎng)絡(luò)頁(yè)面)
    secondPage_text = requests.get(url=job_url, headers=headers).text

    tree = etree.HTML(secondPage_text)
    # 解析崗位名稱
    jobName = tree.xpath('//div[@class="info-primary"]/div[2]/h1/text()')[0]
    salary = tree.xpath('//div[@class="info-primary"]/div[2]/span/text()')[0].strip('\n\t')
    detail = tree.xpath('//div[@class="info-primary"]/p//text()')[0]
    company = tree.xpath('//div[@class="info-company"]/h3/a/text()')[0]
    jobDesc = tree.xpath('//div[@class="detail-content"]/div[1]/div//text()')[0]

    # 持久化存儲(chǔ)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末店茶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劫恒,更是在濱河造成了極大的恐慌忽妒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兼贸,死亡現(xiàn)場(chǎng)離奇詭異段直,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)溶诞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)鸯檬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人螺垢,你說(shuō)我怎么就攤上這事喧务。” “怎么了枉圃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵功茴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我孽亲,道長(zhǎng)坎穿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮玲昧,結(jié)果婚禮上栖茉,老公的妹妹穿的比我還像新娘。我一直安慰自己孵延,他們只是感情好吕漂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著尘应,像睡著了一般惶凝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犬钢,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天苍鲜,我揣著相機(jī)與錄音,去河邊找鬼娜饵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛官辈,可吹牛的內(nèi)容都是我干的箱舞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拳亿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晴股!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肺魁,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤电湘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鹅经,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寂呛,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年瘾晃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贷痪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹦误,死狀恐怖劫拢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情强胰,我是刑警寧澤舱沧,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站偶洋,受9級(jí)特大地震影響熟吏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玄窝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一分俯、第九天 我趴在偏房一處隱蔽的房頂上張望肾筐。 院中可真熱鬧,春花似錦缸剪、人聲如沸吗铐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唬渗。三九已至,卻和暖如春奋渔,著一層夾襖步出監(jiān)牢的瞬間镊逝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工嫉鲸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撑蒜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓玄渗,卻偏偏與公主長(zhǎng)得像座菠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藤树,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容