如何利用python的爬虫技术来爬取图片

准备利用Python爬图片,首先先分析一下:

1:打开网址 查看html网页结构

目标网址:http://www.netbian.com/
我们的目标就是爬取下面的这些壁纸

用Google Chrome浏览器打开链接 F12查看
使用的pyquery
可以看到图片的链接 都在img标签的src属性中 我们只要通过pyquery锁定到这个img标签 就可以继续下一步了

<!-- 展示此网站的部分代码,大家可以用python 的 pyquery测试使用
版权归 http://www.netbian.com/ 所有
-->
<div class="list">
  <ul>
    <li>
      <a href="/desk/23127.htm" title="lol英雄联盟可爱美女塞拉菲娜壁纸" target="_blank">
        <img src="http://img.netbian.com/file/2020/1229/smallce59df78078468c2df6d885c3f8d8b431609253364.jpg"
        alt="lol英雄联盟可爱美女塞拉菲娜壁纸">
        <b>lol英雄联盟可爱美女塞拉菲娜壁纸</b>
      </a>
    </li>
    <li>
      <a href="/desk/23112.htm" title="绿色小清新2021年1月护眼日历桌面壁纸" target="_blank">
        <img src="http://img.netbian.com/file/2020/1223/small8c601b6baa6bfc96ffad330abbc197651608735756.jpg"
        alt="绿色小清新2021年1月护眼日历桌面壁纸">
        <b>绿色小清新2021年1月护眼日历桌面壁纸</b>
      </a>
    </li>
    <li class="nextpage"><a href="/index_2.htm">
      <p>下一页<br>更多精彩</p>
    </a></li>
  </ul>
</div>

我们先来尝试抓取一页的壁纸试试看
下面是具体的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# python爬虫爬取图片 利用pyquery进行解析

import requests
from pyquery import PyQuery as pq
import time

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 '
                  '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
# 这里我使用了代理  你可以去掉这个代理IP 我是为了后面大规模爬取做准备的
proxies = {
    'https': 'xxx.xx.xx.xx:xxxxx'
}


# 请求网页 获取源码
def start_request(url):
    # r = requests.get(url, headers=headers, proxies=proxies) #有代理IP条件时使用
    r = requests.get(url, headers=headers, proxies=proxies)  # 无代理条件测试时使用
    # 这个网站页面使用的是GBK编码 这里进行编码转换
    r.encoding = 'GBK'
    html = r.text
    return html


# 解析网页 获取图片
def parse(text):
    doc = pq(text)
    # 锁定页面中的img标签
    images = doc('div.list ul li img').items()
    x = 0
    for image in images:
        # 获取每一张图片的链接
        img_url = image.attr('src')
        imagefilename = img_url.split("/")[-1]  # 通过url 获取 图片的名称
        # 获得每张图片的二进制内容
        # img = requests.get(img_url, headers=headers, proxies=proxies).content # 有代理条件时使用
        img = requests.get(img_url, headers=headers).content  # 无代理条件测试时使用
        # 定义要存储图片的路劲
        path = "G:/test/" +imagefilename
        # 将图片写入指定的目录 写入文件用"wb"
        with open(path, 'wb') as f:
            f.write(img)
            time.sleep(1)
            print("正在下载第{}张图片".format(img_url))
    print("写入完成")


def main():
    url = "http://www.netbian.com"
    text = start_request(url)
    parse(text)


if __name__ == "__main__":
    main()

运行程序

正在下载第http://img.netbian.com/file/2020/1229/smallce59df78078468c2df6d885c3f8d8b431609253364.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/small7bf4c4848985ea2b4bb9055bc5f8a25d1609253173.jpg张图片
正在下载第http://img.netbian.com/file/2020/0702/7a637948df7c661b616d7fcf03e9d04c.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/small09818abdff8c12d6cf34ac17ddac3cdf1609251574.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/small9f3252e59c9311ce0d73fdcc93032bfc1609250936.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/small288195d57aeba8e36c0bf6f42f6ea2641609250597.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/small405de205d639e531f687e7f61a27d13b1609250132.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/smalld31f9399155cfe735cd439ca988f3bac1609249012.jpg张图片
正在下载第http://img.netbian.com/file/2020/1229/smalle73c58325cbdc1531000cf2c9346edac1609248949.jpg张图片
正在下载第http://img.netbian.com/file/2020/1227/small39570e0319450dbe3b18ac15158640d31609082625.jpg张图片
正在下载第http://img.netbian.com/file/2020/1227/small569ba9f9ecac01d69bb6b2d9461cf3991609082470.jpg张图片
正在下载第http://img.netbian.com/file/2020/0410/small60df03194fbcc55e1f9311eae66fc9c21586525902.jpg张图片
正在下载第http://img.netbian.com/file/newc/fadf8f4844ebceedaa41956a889608b5.jpg张图片
正在下载第http://img.netbian.com/file/2020/0609/small254542c348e0401b7133784724f50cea1591717822.jpg张图片
正在下载第http://img.netbian.com/file/2020/1227/smallb71bf9548a256e50aa8de296b2e51c681609080723.jpg张图片
正在下载第http://img.netbian.com/file/2020/1227/smallf075c4a564de018e36d8a7565c04f1021609081328.jpg张图片
正在下载第http://img.netbian.com/file/2020/1227/small687121adde7b85b0702dcd9458de68b81609081711.jpg张图片
正在下载第http://img.netbian.com/file/2020/1223/small344fb01bb934cac4882d77f29d5ec5751608736763.jpg张图片
正在下载第http://img.netbian.com/file/2020/1223/smallbf4d403408da189c81361527a9c19d8e1608736399.jpg张图片
正在下载第http://img.netbian.com/file/2020/1223/small8c601b6baa6bfc96ffad330abbc197651608735756.jpg张图片
写入完成

查看结果, 哇 图片已经保存到我们指定的目录了

这是获取一页的图片,后面大家可以修改python代码,通过构造url或者获取下一页链接来爬取更多的图片保存到本地文件夹