Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片,在博客园不能用 CSDN 的图片。
当前想到的方案就是:先把 CSDN 上的图片都下载下来,再手动更新吧。
所以简单写了一个爬虫用来下载 CSDN 平台上的图片,用于在其他平台上更新图片时用

更多内容,请看代码注释

效果演示

Python 源代码

提示: 需要先下载 BeautifulSoup 哦,可以用 pip,也可以直接在 PyCharm 中安装
简单的方法:

# coding:utf-8
'''
使用爬虫下载图片:
1.使用 CSDN 博客
2.获取图片连接,并下载图片
3.可去除水印

作者:java997.com
'''

import re
from urllib import request
from bs4 import BeautifulSoup
import datetime

# 构造无水印纯链接数组
def get_url_array(all_img_href):
    img_urls = []
    for h in all_img_href:
        # 去掉水印
        if re.findall("(.*?)\?", h[1]):
            h = re.findall("(.*?)\?", h[1])
            # 因为这里匹配就只有 src 了, 所以直接用 0
            img_urls.append(h[0])
        else:
            # 因为这里还没有处理有 alt 的情况, 所以直接用 1
            img_urls.append(h[1])

    return img_urls

# 构建新目录的方法
def mkdir(path):
    # 引入模块
    import os

    # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符号
    path = path.rstrip("\\")

    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)

    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)

        print('目录 ' + path + ' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print('目录 ' + path + ' 已存在')
        return False

if __name__ == '__main__':

    # url = input("请粘贴博客链接")
    url = "https://blog.csdn.net/qq_40147863/article/details/90484190"

    # 获取页面 html
    rsp = request.urlopen(url)
    all_html = rsp.read()

    # 一锅清汤
    soup = BeautifulSoup(all_html, 'lxml')

    # bs 自动解码
    content = soup.prettify()

    # 获取标题
    tags = soup.find_all(name='title')
    for i in tags:
        # .string 是去掉标签, 只打印内容
        print(i.string)

    # 获取正文部分
    article = soup.find_all(name='article')
    # print(article[0])

    # 获取图片的链接
    all_img_href = re.findall('<img(.*?)src="(.*?)"', str(article))

    # 调用函数, 获取去掉水印后的链接数组
    img_urls = get_url_array(all_img_href);

    # 用当前之间为目录名, 创建新目录
    now_time = datetime.datetime.now()
    now_time_str = datetime.datetime.strftime(now_time, '%Y_%m_%d_%H_%M_%S')
    mkdir(now_time_str)

    print("----------下载图片-------------")
    i = 0
    for m in img_urls:
        # 由于没有精确匹配,并不是所有连接都是我们要的课程的连接,排出第一张图片
        print('正在下载第' + str(i) + '张:' + m)

        # 爬取每个网页图片的连接
        img_url = request.urlopen(m).read()

        # img 目录【必须手动创建好】
        fp = open(now_time_str+'\\' + str(i) + '.jpg', 'wb')

        # 写入本地文件
        fp.write(img_url)

        # 目前没有想到更好的方式,暂时只能写一次,关闭一次,如果有更好的欢迎讨论
        fp.close()
        i += 1

原文地址:https://www.cnblogs.com/xpwi/p/11029392.html

时间: 2024-10-12 19:44:29

Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片的相关文章

python网络爬虫入门(一)——简单的博客爬虫

最近,为了微信公众号的图文,上网疯狂的收集和看了一些有深度的新闻和有趣的引人深思的文字评论,并选择了几篇极品发布出去.但感觉一篇一篇的看实在是麻烦死了.想找一个简单的解决办法,看能不能自动把网上的资料收集起来,然后自己用统一筛选.不巧,最近准备学习下网络爬虫相关知识,于是按照网上的教程自己学着试写了一个小小的爬虫,嘻嘻,是用来爬韩寒博客的. 先把完整的代码贴上来,如果朋友们需要试验下,请先安装python相关环境,然后在复制粘贴保存,再按F5运行. #导入urllib库,python访问网页必须

python网络爬虫进入(一)——简单的博客爬行动物

最近.对于图形微信公众号.互联网收集和阅读一些疯狂的-depth新闻和有趣,发人深思文本注释,并选择最佳的发表论文数篇了.但看着它的感觉是一个麻烦的一人死亡.寻找一个简单的解决方案的方法,看看你是否可以把互联网上的信息自己主动收集,然后,他们使用一个统一的筛选.可惜,最近准备学习的知识网络爬虫,于是按照网上的教程要学会尝试写自己的一个小爬虫,嘻嘻,韩寒的博客是用来攀爬. 第一个完整的代码贴上来,根据假设,朋友们需要测试.请安装python相关环境,存.再按F5执行. #导入urllib库,pyt

[python爬虫] Selenium爬取CSDN博客摘要及问题

本文主要是采用Selenium来爬取CSDN的博文摘要,为后面对CSDN的热点技术.近几年专家发表的博客作数据分析.由于采用BeautifulSoup爬取该网站会报错"HTTPError: Forbidden",所以作者采用Selenium爬取.同时,在爬取过程中遇到了局部动态更新的问题,无法定位换页的问题,作者采用Firebug进行分析,也希望读者提出更好的方法.代码下载地址: 一. CSDN博客网站分析及问题 本文主要爬取CSDN专家的博客,因为专家的论文水平相对高点,同时专栏较多

cnblogs博客下载-cnblogs博客导出-cnblogs博客备份工具-基于python

http://blog.csdn.net/infoworld/article/details/19547723 以下代码是基于infoworld的csdn备份python代码修改的cnblogs博客备份,但是和infoworld的界面不匹配,只能够用在python里面.python确实有意思,开发很快,怪不得这么流行. #! encoding=utf-8 #cnblogs博客备份,使用方法:修改最下面的url和output,然后执行就可以了. import urllib2 import re i

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

[搬运自我的CSDN博客] python抓取javascript动态生成HTML内容的实践

<注:CSDN博客在美国访问特别卡,所以转移到cnblogs来发文章> 本实验在Ubuntu14.04上完成.使用的浏览器是火狐(Firefox 33.0),python版本是2.7.6. 大家都知道用urllib配合正则表达式抓取静态HTML的内容很方便,但是如果网页中有javascript动态生成的内容,urllib就无能为力了. 此时我们要借助一个额外的工具:selenium.它的工作原理是操纵(火狐)浏览器浏览目标网页,等待网页中的javascript全部执行完毕后再对HTML源码进行

Python 爬取CSDN博客频道

初次接触python,写的很简单,开发工具PyCharm,python 3.4很方便 python 部分模块安装时需要其他的附属模块之类的,可以先 pip install wheel 然后可以直接下载whl文件进行安装 pip install lxml-3.5.0-cp34-none-win32.whl 定义一个类,准备保存的类型 class CnblogArticle: def __init__(self): self.num='' self.category='' self.title=''

要批量下载的博客文章太多,又不想全部下载怎么办---豆约翰博客备份专家新增选择导出博客功能

有的时候,我们要下载的博主比较高产,发表了数以千计的博文,要批量下载的博客文章太多,又不想全部下载怎么办? 针对这种需求,新版本的博客备份专家开发了博客的部分导出功能. 与以往只能导出全部博文不同,新版博客备份专家,让用户可以通过先按分类或标题进行筛选,然后勾选想导出的部分博客进行导出. 首先,我们可以对已经下载下来的博文按文章标题或文章分类进行筛选,比如这里我们按分类筛选:如下图所示: 以上,我们在分类筛选框中录入了[IT人生涯],可以看到文章列表自动显示出来属于该分类的文章,不属于该分类的文