python爬取图片

Python 抓取网页中的图片

  Ps:目标网站为千图网,如有需求,请购买正版,该项目仅用于学习交流使用。

分析目标

1.分析网页的请求信息,将请求头加上,主要是防止反爬。这里需要注意的是它的content-type。

 

2.分析元素内容,获取相应的目标。

 

 

3.需要分析一下url

 

 

 

 

代码工程

  分析号目标后就可以着手写了

python代码:

复制代码
import requests
from lxml import etree
import os


# 抓取图片
class Spider_qt(object):
    def __init__(self, pageNo, pageCount):
        # 反扒
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/74.0.3729.131 Safari/537.36",
            "Referer": "https://www.58pic.com/"
        }
        self.get_page(pageNo, pageCount)

    # 获取页面
    def get_page(self, pageNo, pageCount):
        for i in range(pageNo, pageNo + pageCount):
            print("===============================开始抓取第%s页===============================" % i)
            r = requests.get("https://www.58pic.com/piccate/53-0-0-p" + str(i) + ".html", headers=self.headers)
            page = etree.HTML(r.content.decode('gbk'))
            self.get_images(page)

    # 获取图片
    def get_images(self, page):
        # xpath解析
        image_url = page.xpath("///div[@class='image-box']/img/@data-original")
        image_alt = page.xpath("//div[@class='image-box']/img/@alt")
        for url, alt in zip(image_url, image_alt):
            url = "http:" + url
            file_name = alt + ".jpg"
            save_path = "F:\\python\\spider\\images\\qt\\"
            if not os.path.exists(save_path):
                os.makedirs(save_path)
            file_save_path = save_path + file_name
            r = requests.get(url, headers=self.headers)
            print("正在抓取:" + file_name)
            try:
                with open(file_save_path, 'wb') as f:
                    f.write(r.content)
            except:
                print("===============================抓取错误===============================")


def main():
    pageNo = int(input("请输入下载开始页:"))
    pageCount = int(input("请输入需要下载的页数:"))
    Spider_qt(pageNo, pageCount)


if __name__ == '__main__':
    main()
复制代码

效果:

Ps:需要注意的是如果没有requests和lxml需要下载的

posted @   lightbc  阅读(1011)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示