python实现对指定网站当中的所有图片进行爬取

# 功能:  爬取指定网页当中的全部图片
# 开发时间: 2020/10/26  10:12
import requests
import json
import re #进行正则表达式的包的引用
import os
if __name__ == '__main__':
    #创建一个文件夹对象用于实现对所爬取到的图片信息进行保存
    if not os.path.exists('pictures'):
        os.makedirs('pictures')
    #进行UA伪装,将userAgent分装到一个字典对象当中去,user-agent可以到浏览器当中通过抓包工具来获取
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
    '''
        在访问指定网站对象当中的页面的时候可以观察到
        https://www.qiushibaike.com/imgrank/page/4/
        最后面的参数为当前网站当中的第4页当中的图片数据,所以当网站当中100张图片的时候
        要想对网站当中的所有的图片对象进行爬取的时候
        应该写一个通用的URL地址用于动态的访问网站当中不同的页面
    '''
    url = 'https://www.qiushibaike.com/imgrank/page/%d/'
    for pageNum in range(2,13):
        newUrl=format(url%pageNum)
        #通过通用爬虫来实现对第pageNum张网页对象进行获取操作
        response=requests.get(newUrl,headers)
        page_text=response.text#将网站的响应数据以字符串文本的形式来进行保存
        '''
            在网页当中通过抓包工具进行源码分析可知到每一张图片对象都在一个对应的div标签当中
            <div class="thumb">
                <a href="/article/123727095" target="_blank">
                    <img src="//pic.qiushibaike.com/system/pictures/12372/123727095/medium/CHJY6LJ7Y00R9C18.jpg" alt="糗事#123727095" class="illustration" width="100%" height="auto">
                </a>
            </div>
            可以发现当前div块当中对应着一张图片对象
            接下来通过正则表达式来将div标签当中image值提取出来
            ex='<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
        '''
        ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
        #调用正则表达式来进行匹配,ex为正则,page_text为进行匹配的数据,S为单行匹配
        img_src_list=re.findall(ex,page_text,re.S)
        #将所有匹配正则的值存放到列表对象当中并进行打印输出
        print(img_src_list)
        #对列表对象当中所请求到的图片数据信息进行打印输出
        for src in img_src_list:
            src='https:'+src#拼接出图片的完整地址
            #从服务器当中获取二进制形式的图片响应数据
            image_data=requests.get(url=src,headers=headers).content
            #从图片地址当中将图片对象的名称分割出来,将切割后的部分存放到列表对象当中并获取最后一个列表元素
            image_name=src.split('/')[-1]
            #设定当前图片对象的存放路径
            image_path='pictures/'+image_name
            with open(image_path,'wb') as fp:
                fp.write(image_data)#将当前所遍历到的二进制图片数据写入到指定的目录文件夹当中
                print(image_name,'下载成功')

 

 

实现持续自动爬取网站上的图片并保存到指定文件夹中,您可以使用循环和定时器来定期执行爬取操作。以下是一个示例代码: ```python import requests from bs4 import BeautifulSoup import os import time def download_image(url, save_dir): # 发送请求获取网页内容 response = requests.get(url) # 解析网页 soup = BeautifulSoup(response.content, 'html.parser') # 找到所有的图片标签 img_tags = soup.find_all('img') # 创建保存图片的文件夹 if not os.path.exists(save_dir): os.makedirs(save_dir) # 遍历图片标签,下载并保存图片 for img_tag in img_tags: img_url = img_tag['src'] # 判断图片链接是否为完整链接 if not img_url.startswith('http'): img_url = url + img_url try: # 发送请求下载图片 response = requests.get(img_url) # 获取图片的文件名 img_name = img_url.split('/')[-1] # 保存图片指定文件夹 with open(os.path.join(save_dir, img_name), 'wb') as f: f.write(response.content) print(f'Successfully downloaded {img_name}') except Exception as e: print(f'Failed to download image: {img_url}') print(e) # 要爬取网页链接 url = 'https://example.com' # 图片保存的文件夹路径 save_dir = 'images' # 爬取间隔时间(秒) interval = 60 while True: # 调用函数进行图片下载 download_image(url, save_dir) # 等待一段时间后再次执行爬取操作 time.sleep(interval) ``` 在这个示例代码中,我们使用了一个无限循环来持续执行爬取操作。在每次循环中,先调用`download_image`函数来下载图片,然后通过`time.sleep`函数等待一段时间后再次执行循环。您可以根据需要调整`interval`变量来设置爬取间隔时间。 请注意,持续自动爬取网站上的图片可能会对目标网站的服务器造成压力,因此请确保您的爬取行为是合法且不会对网站造成过大的负担。另外,一些网站可能会有反爬虫机制,请遵守网站的规定并尊重其隐私政策。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值