一行Python代码一句注释,大量美女套图等萌新来战!

效果展示:

此模板主要用于多线程套图下载,不过一般大众爬虫不用破译的都可以改改使用,附件有个美图录的例子。

每个用途 每个网址 细节都会有差异 所有带(*)的都属于DIY范畴,需要一些基本的html知识,请灵活使用。

学习Python中有不明白推荐加入交流群号:

前面548中间377后面875

群里有志同道合的小伙伴,互帮互助,

群里有不错的学习教程!

添加了断点续传功能,文件夹名称改为套图地址;

每一句Python源代码后面都有详细注释:

import requests ##参考h踢踢批://docs点python-requests.org/zh_CN/latest/user/quickstart点html

from bs4 import BeautifulSoup ##参考h踢踢批

://beautifulsoup点readthedocs.io/zh_CN/v4.4.0/#id55

import os ##本地写入数据

import urllib.request ##有时直接打开图片地址会显示403 Forbidden,只有先打开相关网页再打开图片才能正常显示,所以我就先打开一下网页,可省略

import re ##正则表达式,用于匹配格式

from multiprocessing import Pool ##多线程

headers = {'User-Agent':"Mozilla/5.0", "Referer": "图库主页"} ##浏览器请求头,有时python直接获取图片时防盗链会踢出,所以我们假装是在用浏览器

def run(url): ##(*)传入图片某分类网页的url

start_html = requests.get(url, headers=headers) ##request该url的html文件

Soup = BeautifulSoup(start_html.text, 'lxml') ##使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)

all_a = Soup.find('div', class_='主体的class名称').find_all('a') ##(*)查找该网页上主体的所有图片

path = url.split('/')[-2] ##(*)网址的最后一个/之前一般是这一类的总称,可作为文件夹名

if not os.path.exists("存储总目录" + "/" + path): ##如果没有这个文件夹的话,创造并进入

os.makedirs("存储总目录" + "/" + path) ##创建一个存放的文件夹

os.chdir("存储总目录" + "/" + path) ##切换到上面创建的文件夹

for a in all_a:

href = a["href"] ##(*) 获取套图网页的url,可省略

elem = a.img['src'] ##(*) 获取本图片地址

folder = elem.split('/')[-2] ##(*) 获取该套图的名称

length = a.next_sibling.next_sibling.get_text()

max_span = int(length[-17:-14]) ##(*) 找到该套图的网页一共有多少页

html = requests.get(href, headers=headers, allow_redirects=False) ##访问套图网页,并阻止重定向(也是防盗链的一种)

u = urllib.request.urlopen(href) ##真的打开这个网页,可省略

for page in range(1, max_span + 1):

page_url = elem[:-5] + str(page) + ".jpg" ##(*) 图片地址格式,需要自己探索

print(page_url) ##(*) 打印一下图片地址,可省略

img_html = requests.get(page_url, headers=headers, allow_redirects=False) ##访问图片地址

name = folder + '-' + str(page) ##(*) 图片名格式,套图名称+第几张图

f = open(name+'.jpg', 'ab') ##写入这个图片

f.write(img_html.content) ##多媒体文件要用.content写

f.close()

urls = {'url1', 'url2','url3'} ##这就是各分类的url

pool = Pool(30) ##线程数

for url in urls:

pool.apply_async(run, args=(url))

pool.close()

pool.join()

print('所有图片已下完')

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180907A1M3XQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券