网站图片下载 Python

import threading
import requests
from lxml import etree as et
import os

# 请求头
headers = {
    # 用户代理
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

# 待抓取网页基地址
base_url = 'https://www.23jj.com/'
# 保存图片基本路径
base_dir = 'D:/python/code/aixjj/'


# 保存图片
def savePic(pic_url, page):
    # 如果目录不存在,则新建
    if not os.path.exists(base_dir):
        os.makedirs(base_dir)
    # 分解符号 ['http:', '', 'img.23jj.com', 'image', '32', '3273', '0_236.jpg']
    arr = pic_url.split('/')
    # -1表示倒数第一个元素 -2 表示倒数第二个元素
    file_name = base_dir + str(page) + '_' + arr[-2] + arr[-1]
    print(file_name)
    # 获取图片内容
    response = requests.get(pic_url, headers=headers)
    # 写入图片
    # with expression as target:
    # expression:是一个需要执行的表达式;
    # target:是一个变量或者元组,存储的是expression表达式执行返回的结果,可选参数。
    # 打开文件
    with open(file_name, 'wb') as fp:
        # 利用Respose对象的iter_content()方法循环,在每次迭代中调用write(),将内容写入该文件
        for data in response.iter_content(128):
            fp.write(data)


# 观察此网站总共只有62页,所以循环62次
def download(k):
    # 请求页面地址
    url = base_url + str(k)
    # 请求页面内容
    response = requests.get(url=url, headers=headers)
    # 请求状态码
    code = response.status_code
    if code == 200:
        # etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,
        # 可以方便的使用getparent()、remove()、xpath()等方法。
        html = et.HTML(response.text)
        # 获取页面所有图片地址
        r = html.xpath('//li/a/img/@src')
        # 遍历图片地址
        for pic_url in r:
            a = 'http:' + pic_url
            savePic(a, k)
    print('第%d页图片下载完成' % k)


# 创建线程
for i in range(1, 63):
    threading.Thread(target=download, args=(i,)).start()

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值