爬虫大法之漫画图片爬取

文章目录

  • 前言
  • 一、项目介绍
  • 二、开发环境及第三方库安装
    • 1.开发环境
    • 2.第三方库安装
  • 三、代码介绍
    • 1.网站分析
    • 2.爬取思路
    • 3.代码介绍
  • 四、结果展示
  • 总结


前言

在一位前辈的博客中有提到,带着目的的学习将会事半功倍,所以在爬虫学习初期,就从简单的图片爬取开始,敬请期待之后的几篇文章。
由于咱们的目的在于学习而非盈利,所以要好好爱护别人家的服务器,切勿造成服务器Loading过大,谢谢大家。

爬虫大法之漫画图片爬取_第1张图片


一、项目介绍

其实小编是个漫画迷,再加上漫画其实就是一张张的图片,正好符合要求,所以本片文章主要介绍如何通过爬虫下载非VIP的漫画图片
爬虫大法之漫画图片爬取_第2张图片


二、开发环境及第三方库安装

1.开发环境

电脑操作系统:Windows10 专业版
开发工具:PyCharm 2020.2
Python版本:Python 3.7.3

2.第三方库安装

本片文章所使用到的库如下:
from bs4 import BeautifulSoup as bs  # 本次使用BeautifulSoup进行数据清洗
import random #获取header时使用,每次请求都使用不同的header
import requests as rq #请求资源时使用
import time #防止多次请求间隔太短导致服务器宕机,所以在每次请求后都会休息3秒钟
import os#用于新建图片文件夹和下载图片

几个库的安装方式都是一样的,所以咱们就以bs4为例,剩下的就交给大家自己去完成了。
在安装Python3的前提下,使用快捷键win+R打开命令提示符,输入pip3 install bs4,按下回车即可自动安装,如果在安装过程中有错误提示,这时候直接找度娘就可以了,独立解决问题的能力还是挺重要的,
爬虫大法之漫画图片爬取_第3张图片


三、代码介绍

1.网站分析

本篇文章所设计到的网站为https://www.mkzhan.com/,找到自己喜欢的漫画,小编特别喜欢《斗罗大陆》,所以就对《斗罗大陆》这部漫画”下手“了,经小编的观察,规律如下:
(1)这篇漫画的主目录URL地址为:https://www.mkzhan.com/211692/
(2)前10章的章节URL地址为:644915.html - 644924.html
(3)每个章节的图片地址都在Class为lazy-read的img标签下,使用BeautifuilSoup时直接使用find_all就能找到所有的图片地址,岂不是美滋滋 - -
爬虫大法之漫画图片爬取_第4张图片

2.爬取思路

(1)分别对每一章节的URL地址发起请求
(2)使用BeautifulSoup获取章节标题和每一张图片的URL地址,章节标题在创建本地图片文件夹时使用,URL地址则是用于请求图片的二进制数据
(3)根据每一章节的标题在本地创建文件夹,并将获取到的图片二进制数据下载到本地

3.代码介绍


(1)对目标URL发起请求,并返回Response对象,供BeautifulSoup使用
# 获取网页html
def GetWebInfo(url):
    header = GetHeader()
    req = rq.get(url, headers=header)
    # 请求一次休息3秒,防止网站负担过大
    time.sleep(3)
    if req.status_code == 200:
        return req
    else:
        print(time.strftime('%Y-%m-%d %H:%M:%S') + ':request Error')

(2)随机获取Requests请求所使用的header

# 随机获取header,反爬
def GetHeader():
    headers = [ \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" \
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", \
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", \
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", \
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", \
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", \
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
    ]
    headerStr = random.choice(headers)
    header = {'User-Agent': headerStr}
    return header

(3)新建本地文件夹并下载图片

# 图片下载
def DownLoadPicture(pictureUrl, filePath):
    dirName = os.path.dirname(filePath)
    if not os.path.exists(dirName):
        os.makedirs(dirName)
    reqPicture = GetWebInfo(pictureUrl)
    with open(filePath, 'wb') as f:
        f.write(reqPicture.content)
    print(time.strftime('%Y-%m-%d %H:%M:%S') + ":下载成功")

四、结果展示

(1)总文件夹

爬虫大法之漫画图片爬取_第5张图片
(2)各个章节的图片展示
爬虫大法之漫画图片爬取_第6张图片

总结

项目就介绍到这里,由于小编刚开始接触博客和Python,有错误或者不当的地方还请帮忙纠正,项目的链接为 https://cowtransfer.com/s/7614170ce05242,有兴趣的可以自行去下载,谢谢大家
爬虫大法之漫画图片爬取_第7张图片

你可能感兴趣的:(python)