利用爬虫爬取博客里面的图片

先上代码,读者可以复制代码运行一下看下效果。

'''
获取主页的内容信息

Mozilla/5.0 (Windows NT 8.1; Win32; x86) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62
'''


import urllib.request
import re

class GetHtml(object):
    def __init__(self,URL,HEAD):
        self.url=URL
        self.head=HEAD

    def get_index(self):
        self.request=urllib.request.Request(self.url)
        self.request.add_header("user-agent",self.head)
        self.response=urllib.request.urlopen(self.request)
        return self.response.read()

    def get_list(self): #获取图片列表
        self.strimglist=[]
        self.imglist= re.findall(b"https://img-blog.csdnimg.cn/\w{32}.png",self.get_index())
        #print(self.imglist)

        for i in self.imglist:
            self.strimglist.append(str(i,encoding="utf8"))
        #print(self.strimglist)
        return self.strimglist
    def get_image(self): # 下载图片的信息
        num=0
        # 由前面index方法
        for self.url in self.get_list():
            num +=1
            with open(str(num)+".png","wb") as f:
                f.write(self.get_index())

            


html=GetHtml("https://blog.csdn.net/ZripenYe/article/details/119455438","Mozilla/5.0 (Windows NT 8.1; Win32; x86) \
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62");

#print(html.get_index())
#print(html.get_list())
html.get_image()

引入两个模块: urllib.request和re

  • urllib.request 模块是一个模仿浏览器访问过程的模块
  • re 模块用于匹配正则表达式

利用GetHtml类将信息传入对象。

主要是有两个信息:

  • url连接(即我的一篇博客的内容)
  • 伪造的头内容

html=GetHtml(“https://blog.csdn.net/ZripenYe/article/details/119455438”,“Mozilla/5.0 (Windows NT 8.1; Win32; x86) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62”);

返回url信息

urllib.request.urlopen() 方法可以返回url信息,赋值给self.response。并且使用return self.response.read()可以返回可读的内容。

正则匹配图片链接内容

经过观察发现,图片的格式都是https://img-blog.csdnimg.cn/**.png,而**里面有着32 个字符,所以我们的正则表达式代码是:
self.imglist= re.findall(b"https://img-blog.csdnimg.cn/\w{32}.png",self.get_index())
url前面加b是以字节的形式匹配的意思。

之后的操作是放入一个列表中,并用utf-8的编码去掉b

下载图片

我们将文件的url解析后以字节的形式写入文件中,使用for self.url in self.get_list(): 这样,每次便利我们的list 它都会作为对象传入self.url 然后依靠get_inde()进行解析

posted @ 2021-08-09 10:38  Zeker62  阅读(48)  评论(0编辑  收藏  举报