由于鄙人刚刚接触爬虫, 对法律要求还不是很了解, 所以分析过程就尽量简陋, 不深入分析, 只讲个大致分析思路, 请见谅
1. 先导入所需要的模块, 其中requests是获取网页必备的模块, re是正则模块(鄙人暂时只会使用正则, 请谅解), threading用来创建多线程提高下载速度, random模块是用于随机获取免费代理, time模块是用于休眠, 避免因为访问太快以至于服务器限制我们范围, 再者也可以减轻对于服务器的负担
import re
import requests
import threading
import random
import time
2. 若要批量下载图片, 首先就得要有图片所在的页面链接才行, 所以定义一个函数获取批量页面的url, 分析一下页面规律, 我害怕违法所以就不显示url, 请谅解
def url_nums(num):
url_list = [f'https://***********.com/2/index_{i}.shtml' for i in range(2, num + 1)]
return url_list
3. 获取到页面url之后, 我们需要获取页面的html并且对html用正则模块re来提取出我们需要的部分源码, 以便于后面提取出图片url
def html_code(url, headers, proxies):
resp = requests.get(url, headers=headers, proxies=proxies)
resp.encoding = 'utf-8'
html = resp.text
pattern = r'<html lang="en">(.*?)<nav class="paging">'
string = html
html_needing = re.findall(pattern, string, re.S)[0]
return html_needing
4. 得到我们所需要的部分源码后, 我们需要进一步提取, 主要是提取出图片的url以及图片的名字, 要注意缩小范围, 防止下载到其他的不需要的图片
def img_name_url(html_needing):
string = html_needing
pattern1 = '<img data-src="(.*?)" alt=".*?">'
pattern2 = '<img data-src=".*?" alt="(.*?)">'
img_url_lists = re.findall(pattern1, string, re.S)
name_lists = re.findall(pattern2, string, re.S)
name_lists = [i.replace('/', '20') for i in name_lists]
name_lists = [i[0:7] for i in name_lists]
name_lists = [i.replace('"', '101') for i in name_lists]
return img_url_lists, name_lists
def button_name_url(html_needing):
string = html_needing
pattern1 = r'<button data-src="(.*?)" data-behaviour="WALLPAPER_DOWNLOAD" data-name=".*?【.*?】"'
pattern2 = r'<button data-src=".*?" data-behaviour="WALLPAPER_DOWNLOAD" data-nam