zoukankan      html  css  js  c++  java
  • 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     
  • 相关阅读:
    Beta 冲刺(5/7)
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
    Beta 冲刺(2/7)
    Beta 冲刺(1/7)
    福大软工 · 第十次作业
    PTA-B 1039 到底买不买 解题思路记录
    SDN负载均衡
    团队作业——项目验收与总结博客
    个人作业——软件工程实践总结作业
  • 原文地址:https://www.cnblogs.com/babyjoy/p/10241221.html
Copyright © 2011-2022 走看看