python爬虫——提取抓取内容(2)百思不得姐爬取图片案例

本文介绍了一种使用Python爬虫技术从网页中抓取图片的方法。通过正则表达式匹配包含图片的div元素,进而精确获取图片URL并实现下载。文章详细展示了代码实现过程,包括请求头设置、正则表达式构造及图片保存路径处理。

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

一.分析代码

在这里插入图片描述
作者试着直接用正则匹配需要的图片地址并没有成功,多次尝试和查阅资料后选择先匹配含有图片的div中所有内容,然后在匹配图片地址可以成功。

二.代码展示

import urllib.request
import urllib.parse
import re
import os


def handle_request(url, page):
    url = url+str(page)
    # print(url)
    headers = {
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
    }
    request = urllib.request.Request(url=url, headers=headers)
    return request


def download_image(content):
    pattern1 = re.compile(r'<div class="j-r-list-c-img">(.*?)</div>', re.S)  # 先把带有图片的div中所有内容匹配出来
    lt = pattern1.findall(content)
    # print(lt)
    # 遍历列表,继续匹配图片的url地址,依次下载图片
    for image_src in lt:
        # print(image_src)
        url_pattern = re.compile(r'data-original="(.*?)".*?', re.S)
        image_url = url_pattern.findall(image_src)[0]  # image_url是一个元素的列表格式必须要str格式才行,所以取巧用切片
        print(image_url)
        # 判断/创建文件夹
        dirname = 'imagedir'
        if not os.path.exists(dirname):
            os.mkdir(dirname)
        # 保存的图片名
        filename = image_url.split('/')[-1]
        filepath = dirname + '/' + filename
        print("图片%s正在下载···" % filename)
        urllib.request.urlretrieve(image_url, filepath)
        print("图片%s下载完毕···" % filename)


def main():
    url = 'http://www.budejie.com/pic/'
    start_page = int(input("起始页码:"))
    end_page = int(input("结束页码:"))
    for page in range(start_page, end_page+1):
        print("第 %s 页开始下载······" % page)
        # 生成请求对象
        request = handle_request(url, page)
        # 发送请求获取响应内容
        content=urllib.request.urlopen(request).read().decode()
        # 解析内容,提取所有的图片链接,下载图片
        download_image(content)
        print("第 %s 页下载完毕······" % page)
        print()
        print()
        print()


if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值