Xpath爬取某时尚网站时装周图片

作为一名比较懒的程序媛, 爬一点图片还是比一页一页翻是要省事些的, 啊哈哈...

这一次尝试的是Xpath而不是用正则

Xpath解析原理:

--标签定位 对标签的属性或者文本数据进行捕获

--xpath路径表达式进行标签定位

--xpath表达式必须作用在xpath函数中

--xpath函数被封装在etree对象中 (需页面源码数据加载到etree中)

通用性强

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     
原文地址:https://www.cnblogs.com/babyjoy/p/10241221.html