在一位前辈的博客中有提到,带着目的的学习将会事半功倍,所以在爬虫学习初期,就从简单的图片爬取开始,敬请期待之后的几篇文章。
由于咱们的目的在于学习而非盈利,所以要好好爱护别人家的服务器,切勿造成服务器Loading过大,谢谢大家。
其实小编是个漫画迷,再加上漫画其实就是一张张的图片,正好符合要求,所以本片文章主要介绍如何通过爬虫下载非VIP的漫画图片
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,按下回车即可自动安装,如果在安装过程中有错误提示,这时候直接找度娘就可以了,独立解决问题的能力还是挺重要的,
本篇文章所设计到的网站为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就能找到所有的图片地址,岂不是美滋滋 - -
(1)分别对每一章节的URL地址发起请求
(2)使用BeautifulSoup获取章节标题和每一张图片的URL地址,章节标题在创建本地图片文件夹时使用,URL地址则是用于请求图片的二进制数据
(3)根据每一章节的标题在本地创建文件夹,并将获取到的图片二进制数据下载到本地
# 获取网页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)总文件夹
项目就介绍到这里,由于小编刚开始接触博客和Python,有错误或者不当的地方还请帮忙纠正,项目的链接为 https://cowtransfer.com/s/7614170ce05242,有兴趣的可以自行去下载,谢谢大家