Xpath爬取某時尚網站時裝週圖片

做爲一名比較懶的程序媛, 爬一點圖片仍是比一頁一頁翻是要省事些的, 啊哈哈...html

這一次嘗試的是Xpath而不是用正則函數

 

Xpath解析原理:url

--標籤訂位 對標籤的屬性或者文本數據進行捕獲spa

--xpath路徑表達式進行標籤訂位code

--xpath表達式必須做用在xpath函數中xml

--xpath函數被封裝在etree對象中 (需頁面源碼數據加載到etree中)htm

通用性強對象

from lxml import etree
# 實例化一個etree對象
tree = etree.parse('./test.html')  # 本地的一個HTML文件

# 解析操做
# 從最外層根節點一層層向下找 //表示多個層級
tree.xpath('//div[@class="xxx"]/p[4]/text()')  
# //div是定位到全部div, 返回的是一個列表  [@class="xxx"]-->是屬性定位
# /p[4] -->定位到第四個p標籤 
# text() -->把定位到的標籤中 文本取出來
# /text()取出直系文本內容 一個元素   //text() 至少有多個元素的列表

# tree.xpath('//div[@class=""]/ul/li[2]/a/@href')

# etree.HTML(response.text)  # 用的多 
 1 import requests
 2 from lxml import etree
 3 import os
 4 
 5 if not os.path.exists("chanelshow"):
 6     os.mkdir("chanelshow")
 7     
 8 # 構造請求頭 url, headers
 9 url = "http://shows.vogue.com.cn/Chanel/"
10 headers = {
11     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
12     "Connection": "close"
13 }
14 # 先拿到響應
15 response = requests.get(url=url, headers=headers)
16 # 拿到響應的文本, html --> 傳入etree.HTML(page_text), etree.HTML()就是選取html文件中的節點或者節點集
17 page_text = response.text
18 
19 tree = etree.HTML(page_text)
20 year_url_list = tree.xpath('//div[@class="tt"]/p/a/@href')  # '//div[@class="tt"]/p/a/@href'路徑表達式
21 
22 for year_url in year_url_list:
23     response2 = requests.get(url=year_url, headers=headers)
24     response2_text = requests.get(url=year_url, headers=headers).text
25     
26     tree = etree.HTML(response2_text)
27     src_url_list = tree.xpath("//li[@class='item']/img/@crs")
28     name_list = tree.xpath("//li[@class='item']/img/@alt")
29     
30     for index, src_url in enumerate(src_url_list):
31         img_data = requests.get(url=src_url, headers=headers).content
32         
33         img_path = "chanelshow/" + name_list[index] + '.jpg'
34         with open(img_path, "wb") as fp:
35             fp.write(img_data)
36 #         print("寫入成功")
37     
相關文章
相關標籤/搜索