用xpath批量爬取高清图片 图解教程 python 爬虫

本文介绍了一种使用Python和XPath实现的图片批量下载方法,详细解释了从网页抓取图片链接到本地存储的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

目录

用到的库:

思路:

需要知道的xpath用法:

分析:

具体代码:

总结:


用到的库:

from lxml import etree
import os
import datetime
import requests

思路:

因为我要爬取某个分类下的所有图片,所以首先我要分析这个url的组成。

思路如下:获取每一页的url → 获取每一页的28个详情页面的url → 获取每一详情页下的原图url → 下载每组图片的原图到本地。最后使用循环进行爬取。

需要知道的xpath用法:

  • 选择某个标签,使用 /,也可以多层查找,如/html/body/h2
  • 获取所有信息,使用 //,如//p,将p标签的所有信息都提取出来
  • 获取文本内容:text()
  • 获取注释:comment()
  • 获取其它任何属性:@xx,如:@href、@src、@title

使用xpath之前,先生成一个xpath对象。

分析:

 

 

图中红线即为这一组图片真实的链接

用下面的xpath解析式:

xpath('//div[@class="content"]/div/div/div/a/@href')

图中红线为一个图集内,图片的真实链接

获取到图片的链接后,用二进制流的方式保存到本地。

具体代码:

from lxml import etree
import os
import datetime
import requests

# 下载图片(获取某一页图片链接并下载)
def downloadImage(url,pathway):
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
    }
    res = requests.get (url='https://'+url, headers=headers)    #加个头,伪装一下
    res.encoding = res.apparent_encoding                      #设置编码格式,防止乱码,好像这个网站,不设置也可以

    dom=etree.HTML(res.text)   #etree.html 生成一个xpath对象,参数必须是string类型

    src=dom.xpath('//div[@id="piclist"]/ul/li/img/@src')    #获取一个图集内图片的链接


    title=dom.xpath('//div[@class="container"]/div/div/div/div/div/h1/text()')    #获取标题
    firstsrc = src[0]
    filetype = firstsrc[-4:]    #获取图片类型,个人觉得不获取也可以

    path = pathway + "/性感美女/" + title[0] + "/"
    if not os.path.exists (path):
        os.makedirs(path)
    i = 1     #给一组图片记个数
    for img in src:
        imgUrl = "https:" + img
        temp=requests.get(imgUrl,headers=headers)
        with open(path+'/'+str(i)+str (filetype),'wb') as f:
            f.write(temp.content)
        print("图片下载成功:"+imgUrl)
        i+=1



pathway = 'G://image'         #存储路径
startPage = 4                 #起始页
endPage = 9                   #终止页,左闭右开
urlList = "https://www.mn52.com/"+"xingganmeinv"+"/list_1_"         #1代表性感美女类型
print("   == 即将开始精彩资源的下载 == ")
startNum = int(startPage)
endNum = int(endPage)

startTime = datetime.datetime.now()
for n in range(startNum,endNum):
    realurl = urlList + str(n) + '.html'    #获得每一页的链接
    response = requests.get(realurl)
    content=response.text
    dom = etree.HTML(content)              #生成一个xpath对象
    src=dom.xpath('//div[@class="content"]/div/div/div/a/@href')    #获取每一组图片的链接
    for img in src:
        path = img.strip("//")
        indexImg = src.index(img)
        #异常处理:遇到异常信息跳过
        # try:
        print("开始下载该组图:" + path)
        starttime = datetime.datetime.now()
        downloadImage(path,pathway)
        endtime = datetime.datetime.now()

        print ("  下载成功,耗时:" + str(endtime - starttime))
        print ("  =========> 第"+ str(indexImg+1) +"组图片下载完成 <=========")
        print("")
        # except Exception as e:
        #     print("  =========> 第"+ str(indexImg+1) +"组图片下载错误 <=========")
        #     pass
        # continue


    print("===========================> 第"+ str(n) +"页图片列表下载完成 <===========================")

endTime = datetime.datetime.now()

print ("下载成功,耗时::" + str(endTime - startTime))

 

成果图:

总结:

边写代码,边报bug,边学习新知识,带着目的去学习会更好,

res.encoding = res.apparent_encoding                      #设置编码格式,防止乱码,
dom=etree.HTML(res.text)   #etree.html 生成一个xpath对象,参数必须是string类型
    if not os.path.exists (path):
        os.makedirs(path)

mkdir只能创建一级文件,而makedirs可以创建多级文件

        with open(path+'/'+str(i)+str (filetype),'wb') as f:
            f.write(temp.content)

加油,少年,下一次爬音乐or视频or小说?

 

 

 

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值