「Python爬蟲」:Xpath表達式的使用

2022年10月06日01:30:08 熱門 1894

「Python爬蟲」:Xpath表達式的使用 - 天天要聞

假設我爬取了這樣的一個html網頁,前面的前端代碼如下所示:

<html xmlns="http://www.w3.org/1999/xhtml">
 <head> 
  <title>OK資源採集-最新影視資源大全</title> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <meta name="keywords" content="OK資源採集-最新影視資源大全" /> 
  <meta name="description" content="OK資源採集-最新影視資源大全" />
  <script>var SitePath='/',SiteAid='10',SiteTid='',SiteId='';</script>

<link href="/template/okokzy/css/home.css" rel="stylesheet" type="text/css" />

<script src="/template/okokzy/js/jquery_ldg.js"></script>

<script src="/template/okokzy/js/jquery.zclip.min.js"></script>

<script src="/template/okokzy/js/ldg.js"></script>

<script src="/js/jq/jquery.lazyload.js"></script>

<script src="/template/okokzy/js/home.js"></script>


 </head>

我們想要獲取其中的script標籤後面的內容,因此我們可以使用Xpath來獲取,假設我們想要獲得第一個script標籤處的值value,就可以使用表達式:

Xpath(/html/head/script/text())[0]

這個表達式的含義是輸出在html下的head下的第一個script標籤處的文字,因為我們前面的代碼:

Xpath(/html/head/script/text())

會輸出所有以script開頭的對象,因此加上[0]限定為第一個script後面的文字。

因此輸出為:

var SitePath='/',SiteAid='10',SiteTid='',SiteId='';

在Xpath表達式當中'//' 表示前面的省略不計,直接跳過兩層或者多層拿到後面的標籤中所對應的對象。

二.標籤屬性的使用

假設我們想要爬取font標籤當中具備某個color屬性的文字內容,如下所示:

<font color="#000000">OK資源站 
    </font><font color="#FF0000">HTTPS</font><font color="#000000"> 站請進入>>></font></a></font><font size=

font這個標籤之後顯然會有很多不同的color,但是我們只想要這裡color為「#000000」後面的文字內容,因此我們使用這樣的表達式:

r_two=tree.xpath('//font[@color="#000000"]/text()')

這樣就餓可以了。整體的代碼如下所示:

import requests
from lxml import etree

post_url = 'https://www.okzy10.com/'
#cookie='lastCity=100010000; __zp_stoken__=ce26bZyQcLhoDK1A7M0RzPzMQEDJzHHpAQCJkUHtpSSFDSCkNeko0HBZxSywqeBxlHh8PIE4CLwgTSWsacwcdbEMNUBBzE2APASkfAktgOFskSn9HCTgkLmE7GFxecS8MGE4FGX99IHdsQHV5YQ%3D%3D; __c=1610949395; __g=-; __l=l=%2Fwww.zhipin.com%2F&r=https%3A%2F%2Fwww.google.com%2F&g=&s=3&friend_source=0&s=3&friend_source=0; __a=13532184.1600828409.1610683874.1610949395.205.23.3.205; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1610082805,1610683875,1610949395,1610949407; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1610949407'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
}

#解析本地的html
#使用etree.parse
#解析網頁上的html
#使用etree.HTML
req = requests.get(post_url,headers=headers)

#print(req.text)
with open('ok_resource.html','w',encoding='utf-8') as fp:
    fp.write(req.text)

#使用xpath表達式對etree對象進行解析
parser = etree.HTMLParser(encoding="utf-8")
tree=etree.parse('ok_resource.html',parser=parser)
r=tree.xpath('/html/head/script/text()')[0]
r_two=tree.xpath('//font[@color="#000000"]/text()')
print(r)
print(r_two)

熱門分類資訊推薦

曾小賢的上司Lisa榕,現實中不僅才貌雙全,還嫁給了CEO - 天天要聞

曾小賢的上司Lisa榕,現實中不僅才貌雙全,還嫁給了CEO

曾小賢的上司Lisa榕,現實中不僅才貌雙全,還嫁給了CEO雖然說《愛情公寓》這部劇在劇情上充滿了爭議,但是一定程度上,這部劇也是很多人的回憶,是伴隨了一代人的青春回憶,而且劇中的很多角色都成為了經典,他們的口頭禪也一直被拿來玩兒梗。
Lisa榕做主持多年沒紅,被陳赫拉進愛情公寓爆紅,如今怎樣了 - 天天要聞

Lisa榕做主持多年沒紅,被陳赫拉進愛情公寓爆紅,如今怎樣了

談到《愛情公寓》這部火爆一時的歡樂喜劇,大家肯定都不陌生。不知道大家是否還記得《愛情公寓》中那個把曾小賢治得服服帖帖的女上司Lisa榕,現實中的她名叫榕榕,和劇中的形象也判若兩人。1981年出生在遼寧瀋陽的榕榕,畢業於上海戲劇學院,後來成為了上海東方傳媒集團有限公司的一名主持人。