首页 > 其他分享 >《爬虫》爬取页面图片并保存

《爬虫》爬取页面图片并保存

时间:2023-08-10 22:23:31浏览次数:31  
标签:content 爬虫 爬取 file import print path 页面

@

目录


简单的爬取图片

前言

这几天打算整理与迁移一下博客。因为 CSDN 的 Markdown 编辑器很好用 ,所以全部文章与相关图片都保存在 CSDN。而且 CSDN 支持一键导出自己的文章为 markdown 文件。但导出的文件中图片的连接依旧是 url 连接。为了方便将图片保存到本地,在这里保存一下爬虫代码。

只要修改正则匹配代码,同样适用于博客园爬取。

代码

为了提高效率,该脚本将从保存的本地 markdown 文件读取图片链接。当然脚本中也保留了爬取某个页面所有图片的函数。

脚本名:spider.py

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


def open_url(url):
    '''
    用于网页爬取。这里不采用这个函数
    '''
    req = urllib.request.Request(url) 
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')
    # 访问url,并将页面的二进制数据赋值给 page
    page = urllib.request.urlopen(req)
    # 将page中的内容转换为utf-8编码
    html = page.read().decode('utf-8')

    return html


def read_file(file):
    print('\n正在读取文件...')
    with open(file, 'rb') as my_file:
        content = my_file.read()
        content = content.decode('utf-8')

    print('已读取文件.')

    return content


def get_img(content, file_path):

    # 正则匹配图片链接
    # p=r'<img src="([^"]+\.png)"'  # 可用于网页爬取
    p=r'https://img-blog\.csdnimg\.cn/[\w\-/]+\.png'

    #返回正则表达式在字符串中所有匹配结果的列表
    print('\n正在读取图片链接...')
    img_list=re.findall(p, content)
    list_len = str(len(img_list))
    print('已读取图片链接.\n')

    for img_url in img_list:
        print(img_url)
    print('\n共 ' + list_len + ' 条数据')

    # 图片保存位置。如果文件夹不存在则创建
    save_path = file_path + '/assets/'

    if not os.path.exists(save_path):
        os.makedirs(save_path)

    print('\n正在保存图片...\n')
    num = 0  # 用于记录进度
    for each in img_list:
        #以 / 为分隔符,-1返回最后一个值
        photo_name=each.split("/")[-1]

        #访问 each,并将页面的二进制数据赋值给photo
        photo=urllib .request .urlopen(each)

        w=photo .read()

        f=open(save_path + photo_name + '.png', 'wb')
        f.write(w)
        f.close()

        # 展示进度
        print(num % 10, end="")
        if (num + 1) % 10 == 0 and num != 0:
            print('    进度: ' + str(num + 1) + '/' + list_len)
        sys.stdout.flush()  # 刷新输出缓冲
        num += 1

    print('\n\n完成!\n')


if __name__=='__main__':
    if len(sys.argv) != 2:
        print("\nUsage:   python spider.py <file>")
        print('example: python spider.py "F:\\T\\test.md"')
        sys.exit()

    file = str(sys.argv[1])

    file_name = os.path.basename(file)
    file_path = os.path.dirname(file)
    print('\nfile_name: ' + file_name)
    print('file_path: ' + file_path)

    # 读取文件内容
    content = read_file(file)

    # 爬取图片
    get_img(content, file_path)

效果

在这里插入图片描述

在这里插入图片描述


别后相思人似月,云间水上到层城。

——《明月夜留别》(唐)李冶

标签:content,爬虫,爬取,file,import,print,path,页面
From: https://www.cnblogs.com/GCom/p/17621741.html

相关文章

  • 汽车之家页面性能监控建设实践
    1前言关注用户体验,提高页面性能,是每位前端研发同学的日常工作之一。提高页面性能对业务的帮助,虽不易衡量,但肯定是利远大于弊。如何衡量页面性能优劣?如何帮助研发同学快速定位到页面性能瓶颈点?一直是前端的重点工作之一。本文分享汽车之家在页面性能监控建设方面的部分工作,主要包......
  • 爬虫之selenium
    一、selenium模块之前,我们爬虫是模拟浏览器,但始终不是用的浏览器,但今天我们要说的是另一种爬虫方式,这次不是模拟浏览器,而是用程序去控制浏览器进行一些列操作,也就是selenium。selenium是python的一个第三方库,对外提供的接口可以操控浏览器,比如说输入、点击,跳转,下拉等......
  • 利用爬虫爬知乎少字回答
    利用爬虫爬知乎少字回答感谢马哥python说的指导最近在学习有关的知识如果怕对服务器影响可以修改sleep时间每次更长一点。这样就不用看一些营销号的长篇大论或者看别人写小说了。#发送请求有bug一次只有五个回答但是我们可以拿到下一次回答。#最后一次回答的......
  • 高性能爬虫的秘诀:合理配置HTTP代理池实现并发请求
    哈喽,爬虫程序员们大家好!你们有没有遇到这样的情况:爬取的数据量庞大,但爬虫速度却慢得难以忍受?别着急,今天我将向大家分享高性能爬虫的秘诀之一:合理配置HTTP代理池实现并发请求。这一技巧不仅能够显著提升爬虫的响应速度,还能帮助我们突破IP封锁和反爬虫机制的限制。首先,让我们了解一下......
  • 爬虫框架的选择与对比:Python爬虫框架的比较与评估
    爬虫框架的选择与对比:Python爬虫框架的比较与评估Hey大家好!作为一名专业的隧道代理供应商,我今天要和大家分享一些关于爬虫框架的知识。在开发爬虫项目时,选择一个合适的框架非常重要,它可以提高开发效率、简化操作并提供丰富的功能。Python作为一门流行的编程语言,拥有许多优秀的爬虫......
  • PageOffice 在线编辑 office文件,回调父页面
    一、子页面调用父页面的方法varvalue=window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的JS函数有返回值window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的JS函数无返回值二、是否需要传递参数(子页面关闭窗口的同时刷新父页面......
  • 爬虫与搜索引擎优化:通过Python爬虫提升搜索排名
    作为一名专业的爬虫程序员,我深知网站的搜索排名对于业务的重要性。在如今竞争激烈的网络世界中,如何让自己的网站在搜索引擎结果中脱颖而出,成为关键。今天,和大家分享一些关于如何通过Python爬虫来提升网站的搜索排名的技巧和实践经验。无论你是在提升自己的网站排名还是优化客户的SE......
  • nginx降低爬虫的效率
    环境nginx1.20理由不说了,就是通过Nginx一些策略来帮助防止爬虫或恶意访问配置User-Agent检测爬虫通常会使用特定的User-Agent来标识自己,Nginx可以通过检测User-Agent字符串并拒绝使用非法的User-Agent的请求。if($http_user_agent~*"badcrawler"){return403;//......
  • 高匿名算优HTTP代理:为何是网络爬虫的最佳选择?
    HTTP代理有一般匿名和高匿名代理两种,一般匿名HTTP代理在进行网络爬虫时,存在安全风险。为社么说高匿名算优HTTP代理更适合网络爬虫呢,原因有一下几点:高匿算优HTTP代理能隐藏真实IP地址、提高爬取效率、突破访问限制、防止被反爬虫机制检测等四大优点。下面具体的来分析一下四点优点:使......
  • 安防视频监控平台EasyNVR页面无法上传授权文件,该如何进行授权?
    TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中,EasyNVR可提供视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视......