爬取自然风景网的图片

# -*- coding:utf-8 -*-
#获取网页源码/下载图片/网页/视频等
import requests
#解析网页相关数据
from lxml import etree
#操作文件夹/路径
import os

#1.下载网页源码
#2.解析网页源码(难度比较大)
#3.存储相关数据
#1
url = "http://www.ivsky.com/tupian/ziranfengguang/"
response = requests.get(url)
#2
#content /text 只不过数据类型不一样
#将网页源码解析为根节点
root = etree.HTML(response.content)
#3.
#根据xpath来定位相关数据
#顺序:ul   li   a
#注意:xpath返回的一定是个列表
a_list = root.xpath("//ul[@class='tpmenu']/li/a")
#对列表进行切片,跳过"所有分类"这个元素
#a_list = a_list[1:]
for a in a_list[1:]:
    #print(a)a是元素类型的,只要是元素类型的都可以利用xpath
    #text()表示获取标签之间的文本内容
    big_title = a.xpath("text()")[0]
    #获取标签中的某个属性   @某个属性
    big_url = a.xpath("@href")[0]
    if not big_url.startswith("http"):
        big_url="http://www.ivsky.com"+big_url
    print(big_title,big_url)

    #下载小分类
    big_response = requests.get(big_url)
    #解析
    big_root = etree.HTML(big_response.content)
    big_a_list = big_root.xpath("//div[@class='sline']/div/a")
    for big_a in big_a_list:
        small_title = big_a.xpath("text()")[0]
        small_url = big_a.xpath("@href")[0]
        if not small_url.startswith("http"):
            small_url="http://www.ivsky.com"+small_url
        print(small_title,small_url)

        #文件夹路径,,电脑上利用\,\n转义字符
        path="images/"+big_title+"/"+small_title
        #如果路径对应的文件夹不存在,那么创建,防止多次运行时,文件夹已经存在,出现创建失败的错误
        if not os.path.exists(path):
            #makedirs=MakeDirectory  根据路径创建文件夹
            os.makedirs(path)


        #处理图片   #div a img

        page = 1
        old_small_url=small_url
        #加入循环,,能够处理下一页的内容(模拟所有页)
        while True:
            #默认下载第一页
            small_response = requests.get(small_url)
            # #获取状态码
            # small_response.status_code
            small_root = etree.HTML(small_response.content)
            img_list = small_root.xpath("//div[@class='il_img']/a/img")
            #列表为空,,退出循环
            if not img_list:
                break
            for idx,img in enumerate(img_list):
                src=img.xpath("@src")[0]
                #分割地址,取名称
                # name = src.split("/")[-1]
                #图片名称换一种方法
                name = img.xpath("@alt")[0] + str(page) + "_" + str(idx) + ".jpg"
                img_response = requests.get(src)
                f=open(path+"/"+name,"wb")
                f.write(img_response.content)
                f.close()
            page += 1
            small_url=old_small_url+"/index_%s.html" %page

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值