这是晚上没事无聊写的python爬虫小程序,专门爬取妹子图的,养眼用的,嘻嘻!身为程序狗只会这个了!

废话不多说,代码附上,仅供参考学习!

"""
功能:爬取妹子图全网妹子图片,可以选择爬取年份,自动分类保存
作者:68喜科技
"""
import requests
from lxml import etree
# import re
import os
# from time import sleep class Meizitu(object):
"""爬取妹子图中的图片"""
def __init__(self, year):
self.url = "http://www.mzitu.com/all/"
self.headers = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}
self.year = year # 获取页面
def get_page(self, url, headers):
response = requests.get(url, headers=headers)
return response.content.decode() # 提取列表页中的urls
def get_detail_urls_list(self, page_content, year):
html_content = etree.HTML(page_content)
year_list = html_content.xpath("//div[@class='year']/text()")
index = 2019 - year
# 提取某一年的相关主题的urls
xpath_var = "//div[@class='year'][{}]/following-sibling::*[1]//p[@class='url']/a/@href".format(index)
if index <= len(year_list):
urls_list = html_content.xpath(xpath_var)
# print(urls_list)
else:
urls_list = None
return urls_list # 构造保存路径并创建目录
def save_path(self, detail_html_content, first_img_url, img_name):
# 构造保存路径
path_prefix1 = detail_html_content.xpath("//div[@class='currentpath']/a/text()")[1]
# print(path_prefix1)
path_prefix2 = first_img_url[20:29]
# print(path_prefix2)
save_path = "./妹子图/" + path_prefix1 + path_prefix2 + img_name + "/" # 如果目录不存在,则创建目录
if not os.path.exists(save_path):
os.makedirs(save_path) return save_path # 请求和保存图片
def save_img(self, img_url, img_headers, img_save_path):
# 请求图片
img_content = requests.get(img_url, headers=img_headers).content
# 保存图片
with open(img_save_path, "wb") as f:
f.write(img_content) # 构造图片请求地址
def img_url(self, first_img_url, img_index):
if img_index < 10:
img_url = first_img_url[:32] + "0" + str(img_index) + ".jpg"
else:
img_url = first_img_url[:32] + str(img_index) + ".jpg"
# print(img_url)
return img_url # 构造图片的请求头
def img_headers(self, url, img_index):
if img_index == 1 :
refer_url = url
else:
refer_url = url + "/" + str(img_index)
# print(refer_url) img_headers = {
# "Accept":"image/webp,image/apng,image/*,*/*;q=0.8",
# "Accept-Encoding":"gzip, deflate",
# "Accept-Language":"zh-CN,zh;q=0.9",
# "Connection":"keep-alive",
"Host":"i.meizitu.net",
"Referer":refer_url,
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
}
# print(img_headers,end="\n\n")
return img_headers # 构造每个主题的图片请求地址 并保存
def get_img_urls(self, url, detail_html_content, first_img_url, img_name, save_path):
# 每个主题中的图片总数
img_total_num = int(detail_html_content.xpath("//div[@class='pagenavi']/a/span/text()")[4]) # 构造图片地址 http://i.meizitu.net/2018/02/18c01.jpg
for img_index in range(1, img_total_num + 1):
img_url = self.img_url(first_img_url, img_index)
img_headers = self.img_headers(url, img_index)
# 构造图片具体保存路径
img_save_path = save_path + img_name + str(img_index) + ".jpg"
# sleep(10)
# 请求和保存图片
self.save_img(img_url, img_headers, img_save_path) # 获取图片
def get_image(self, detail_urls_list):
for url in detail_urls_list:
detail_page = self.get_page(url, headers=self.headers)
detail_html_content = etree.HTML(detail_page)
# 第一页图片地址
first_img_url = detail_html_content.xpath("//div[@class='main-image']/p/a/img/@src")[0]
# print(first_img_url)
# 获取图片保存的名字
img_name = detail_html_content.xpath("//h2[@class='main-title']/text()")[0]
# print(img_name) # 构建保存路径并创建目录
save_path = self.save_path(detail_html_content, first_img_url, img_name) # 构建图片请求地址并下载
self.get_img_urls(url, detail_html_content, first_img_url, img_name, save_path) # 启动爬虫
def run_spider(self):
# 获取妹子图中的列表页内容
page_content = self.get_page(self.url, self.headers)
# 获取详情页的地址列表
detail_urls_list = self.get_detail_urls_list(page_content, self.year)
# 获取图片
self.get_image(detail_urls_list) if __name__ == "__main__":
year = int(input("请输入您要爬取的年份:"))
meizitu = Meizitu(year)
meizitu.run_spider()

  

用python爬取全网妹子图片【附源码笔记】的更多相关文章

  1. Python爬取全站妹子图片,差点硬盘走火了!

    在这严寒的冬日,为了点燃我们的热情,今天小编可是给大家带来了偷偷收藏了很久的好东西.大家要注意点哈,我第一次使用的时候,大意导致差点坏了大事哈! 1.所需库安装 2.网站分析 首先打开妹子图的官网(m ...

  2. selenium实战:窗口化爬取*宝数据(附源码链接)

    完整代码&火狐浏览器驱动下载链接:https://pan.baidu.com/s/1pc8HnHNY8BvZLvNOdHwHBw 提取码:4c08 双十一刚过,想着某宝的信息看起来有些少很难做 ...

  3. Python爬取养眼图片

    1.准备 各位绅士们,你可能会觉得疫情在家无聊,那么现在我们的Python语言可以满足你们的需求.项目需要的工具(1)Python3(2)requests库requests库可以通过代码pip ins ...

  4. python 爬取知乎图片

    先上完整代码 import requests import time import datetime import os import json import uuid from pyquery im ...

  5. 使用python爬取P站图片

    刚开学时有一段时间周末没事,于是经常在P站的特辑里收图,但是P站加载图片的速度比较感人,觉得自己身为计算机专业,怎么可以做一张张图慢慢下这么low的事,而且这样效率的确也太低了,于是就想写个程序来帮我 ...

  6. python爬取基础网页图片

    python基础爬虫总结 1.爬取信息原理 与浏览器客户端类似,向网站的服务器发送一个请求,该请求一般是url,也就是网址.之后服务器响应一个html页面给客户端,当然也有其他数据类型的信息,这些就是 ...

  7. Python3爬取美女妹子图片转载

    # -*- coding: utf-8 -*- """ Created on Sun Dec 30 15:38:25 2018 @author: 球球 "&qu ...

  8. Python爬虫一爬取B站小视频源码

    如果要爬取多页的话 在最下方循环中 填写好循环的次数就可以了 项目源码 from fake_useragent import UserAgent import requests import time ...

  9. Python:游戏:扫雷(附源码)

    这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...

随机推荐

  1. async + promise 解决回调地狱

    // 解决异步回调地狱的方案: async + promise async function writeFile() {   // 打开文件   const fd = await new Promis ...

  2. 轮胎魔术公式(Magic Fomula)模型

    魔术公式是用三角函数的组合公式拟合轮胎试验数据,用一套形式相同的公式就可以完整地表达轮胎的纵向力Fx.侧向力Fy.回正力矩Mz.翻转力矩Mx.阻力矩My以及纵向力.侧向力的联合作用工况,故称为“魔术公 ...

  3. js 获取服务端时间,并实现时钟

    本例子以vue语法伪代码书写: 1,获取服务端北京时间 getRealTime() { let that = this; var xhr = new XMLHttpRequest(); if( !xh ...

  4. [转帖]armel、armhf和arm64

    armel.armhf和arm64 转帖 1 这些名词是什么的缩写 1.1 armel 是arm eabi little endian的缩写.eabi是软浮点二进制接口,这里的e是embeded,是对 ...

  5. adb常用命令总结

    针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中. And ...

  6. C语言中的共用体(union)和枚举(enum)

    1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5}; //错误 union Data a = {16}; //正确 union ...

  7. 【LEETCODE】49、数组分类,简单级别,题目:566,1089

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  8. ffmpeg 速查手册

    ref : http://linux.51yip.com/search/ffmpeg ffmpeg是一个源于Linux的工具软件,是FLV视频转换器,可以轻易地实现FLV向其它格式avi.asf. m ...

  9. 使用Jenkins自带功能(不用shell)构建Docker镜像并推送到远程仓库

    意义: 一开始实现这个目的是在Jenkins中使用的shell脚本,也就是如下的这个: bash # 进入到生成jar包的根目录 cd ${WORKSPACE}/${module_filename} ...

  10. logback 日志相关

    日志相关: logback:https://www.cnblogs.com/gavincoder/p/10091757.html https://www.cnblogs.com/hhhshct/p/9 ...