热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3爬虫之破解图片防盗链

importrequests,os,os.path,randomfrombs4importBeautifulSoupdefget_soup(url):获取网站的s
import requests, os, os.path, random
from bs4 import BeautifulSoup


def get_soup(url):
"""
获取网站的soup对象
"""

req = requests.get(url,)
html = req.text
soup = BeautifulSoup(html, features='html.parser')
return soup


def get_pages(url):
"""
获取妹子图网站的页数
"""

soup = get_soup(url)
nums = soup.find_all('a', class_='page-numbers')
pages = int(nums[-2].text)
return pages


def get_menu(url):
"""
获取页面的所有妹子图主题的链接名称和地址,记入列表
"""

soup = get_soup(url)
menu = []
menu_list = soup.find_all('a', target='_blank')
for i in menu_list:
result = i.find_all('img', class_='lazy')
if result:
# 图片名字
name = result[0]['alt']
address = i['href']
menu.append([name, address])
return menu


def get_links(url):
"""
获取单个妹子图主题一共具有多少张图片
"""

soup = get_soup(url)
all_ = soup.find_all('a')
nums = []
for i in all_:
span = i.find_all('span')
if span:
nums.append(span[0].text)
return nums[-2]


def get_image(url, filename):
"""
从单独的页面中提取出图片保存为filename
"""

soup = get_soup(url)
image = soup.find('img').attrs.get('src')

img_cOntent= requests.get(image,).content
with open(filename, 'wb') as f:
f.write(img_content)


def main(page):
"""
下载第page页的妹子图
"""

print('正在下载第 %s 页' % page)
page_url = url + '/page/' + str(page)
menu = get_menu(page_url)
print('@@@@@@@@@@@@@@@@第 %s 页共有 %s 个主题@@@@@@@@@@@@@@@@' % (page, len(menu)))
for i in menu:
# i[0]代表图片主题名字
dir_name = os.path.join('MeiZiTu', i[0])
if not os.path.exists(dir_name):
os.makedirs(dir_name)
pic_nums = int(get_links(i[1]))
print('\n\n\n@@@@@@@@@主题 %s 一共有 %d 张图片@@@@@@@@@\n' % (i[0], pic_nums))
for pic in range(1, pic_nums + 1):
basename = str(pic) + '.jpg'
filename = os.path.join(dir_name, basename)
# MeiZiTu\性感美女桃子衣不蔽体 丰乳肥臀难抵诱惑\6.jpg
pic_url = i[1] + '/' + str(pic)
# 获取单张图片的url http://www.mzitu.com/102205/3
if not os.path.exists(filename):
pass
print('......%s' % basename, get_image(pic_url, filename))
else:
print(filename + '已存在,略过')


if __name__ == '__main__':
url = 'http://www.mzitu.com/'
pages = get_pages(url)
print('$$$$$$$$$妹子图一共有 %s 页$$$$$$$$$$$$$$' % pages)
if not os.path.exists('MeiZiTu'):
os.mkdir('MeiZiTu')
page_start = input('Input the first page number:\n')
page_end = input('Input the last page number:\n')
if int(page_end) > int(page_start):
for page in range(int(page_start), int(page_end)):
main(page)
elif page_end == page_start:
main(page_end)
else:
print("输入错误,起始页必须小于等于结束页\n")

推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
author-avatar
棉花小姐啦啦啦取_649
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有