python环境:python3

运行环境:win10和linux都可以,其他系统没测

1 安装依赖

pip install requests
pip install lxml
pip install feedparser

2 创建一个新文件夹

3 运行该脚本

python mzitu.py

源码如下:

# -*- coding: UTF-8 –*-
import feedparser
import requests
from lxml import etree
import threading
import random
import os
 
def get_url():
 
    rss_url = 'https://www.mzitu.com/feed/'
    feeds = feedparser.parse(rss_url)
 
    page_url = []
    for i in range(20):
        page_url.append(feeds.entries[i]['link'])
 
    return page_url
 
def download(dirname, imgurl):
 
    headers = {
    'referer':'https://www.mzitu.com/',
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
 
    filename = imgurl.split('/')[-1]
 
    r = requests.get(imgurl, headers = headers, stream=True)
    if os.path.exists(dirname):
        with open(dirname + '/' + filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=32):
                f.write(chunk)
            print('下载:%s中' % filename)
    else:
        os.mkdir(dirname)
        with open(dirname + '/' + filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=32):
                f.write(chunk)
            print('下载:%s中' % filename)
 
def get_img(url):
 
    r = requests.get(url)
    page = etree.HTML(r.text)
    span = page.xpath('/html/body/div[2]/div[1]/div[4]/a[5]/span')
    hs = page.xpath('//h2[@class="main-title"]')
    for h in hs:
        title = h.text
    for a in span:
        pages = a.text
    try:
        for i in range(int(pages)+1):
            if i == 1:
                pass
            else:
                imgpage = url + '/' + str(i)
                r1 = requests.get(imgpage)
                page1 = etree.HTML(r1.text)
                x_href = page1.xpath('/html/body/div[2]/div[1]/div[3]/p/a/img')
                for href in x_href:
                    imgurl = href.get('src')
                    download(title, imgurl)
    except KeyboardInterrupt:
        pass
    except:
        pass
 
def main():
 
    urls = get_url()
    threads=[]
    for i in range(len(urls)):
        t = threading.Thread(target=get_img, args=(urls[0+i],))
        threads.append(t)
 
    for i in threads:
        i.start()
 
    for i in threads:
        i.join()
 
if __name__ == '__main__':
    main()

如果遇到问题,源码请到百度网盘下载;百度网盘   提取码:7pv8

4 升级版(可下载所有组图)

源码如下:

# -*- coding: UTF-8 鈥?-
import feedparser
import requests
from lxml import etree
import threading
import random
import os def get_url2():
rss_url = 'https://www.mzitu.com/all/'
r = requests.get(rss_url)
page = etree.HTML(r.text)
result =page.xpath('/html/body/div[2]/div[1]/div[2]/ul/li/p[2]/a')
print('鏈?d缁勫浘'%len(result))
page_url = []
for x in result:
page_url.append(x.get('href'))
#print(x.get('href'))
return page_url def download(dirname, imgurl): headers = {
'referer':'https://www.mzitu.com/',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
} filename = imgurl.split('/')[-1] r = requests.get(imgurl, headers = headers, stream=True)
if os.path.exists(dirname):
with open(dirname + '/' + filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
print('涓嬭浇:%s涓? % filename)
else:
os.mkdir(dirname)
with open(dirname + '/' + filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
print('涓嬭浇:%s涓? % filename) def get_img(url): r = requests.get(url)
page = etree.HTML(r.text)
span = page.xpath('/html/body/div[2]/div[1]/div[4]/a[5]/span')
hs = page.xpath('//h2[@class="main-title"]')
for h in hs:
title = h.text
for a in span:
pages = a.text
try:
for i in range(int(pages)+1):
if i == 1:
pass
else:
imgpage = url + '/' + str(i)
r1 = requests.get(imgpage)
page1 = etree.HTML(r1.text)
x_href = page1.xpath('/html/body/div[2]/div[1]/div[3]/p/a/img')
for href in x_href:
imgurl = href.get('src')
download(title, imgurl)
except KeyboardInterrupt:
pass
except:
pass def main(): urls = get_url2()
threads=[]
for i in range(len(urls)):
t = threading.Thread(target=get_img, args=(urls[0+i],))
threads.append(t) for i in threads:
i.start() for i in threads:
i.join() if __name__ == '__main__':
main()

如果遇到问题,源码请到百度网盘下载;百度网盘  提取码:nxoo

注意:经测试,4 升级版在运行时,会大量占用内存,内存小的电脑估计抗不住。。

Python3多线程爬取meizitu的图片的更多相关文章

  1. Python3 多线程爬取梨视频

    多线程爬取梨视频 from threading import Thread import requests import re # 访问链接 def access_page(url): respons ...

  2. python3 urllib爬取wallhalla网站图片

    点我去我的github上看源码 简单使用静态方法爬取https://wallhalla.com/网站的图片 参考: https://blog.csdn.net/cquptcmj/article/det ...

  3. Python3 urllib 爬取 花瓣网图片

    点我去我的github上看源码 **花瓣网是动态的,所以要抓包分析,,但我真的累的不行,不想写教程了,我源码里有注释

  4. python 爬虫入门----案例爬取上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. ...

  5. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  6. Python爬虫入门教程 14-100 All IT eBooks多线程爬取

    All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来. 然后放着 ...

  7. Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

  8. Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  9. Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

随机推荐

  1. Java垃圾收集器与内存分配策略

    程序的计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈中的栈侦随着方法的进入和退出而有条不紊地执行出栈和如栈操作. 判断对象是不是已经死亡的方法: 一.引用计数算法: 给对象添加一个引用 ...

  2. maven运行工程

    1.cd到工程目录下,执行打包命令-----mvn package 2.cd到工程的target目录执行运行命令 java -classpath myapp-1.0-SNAPSHOT.jar cn.m ...

  3. AttributeError: module 'unittest' has no attribute 'TestCase'

    一个自己给自己挖的坑 大家千万不要用库的名称命名,特别是刚刚入门的时候.文件夹.文件,都不要用库的名称. 一旦与库重名,就会出现这种 AttributeError. 引以为戒,以后我再这么命名,我就是 ...

  4. python3正则表达式详细用法示例

    转载自:https://www.runoob.com/python3/python3-reg-expressions.html

  5. SGI RB-tree深入理解

    前言 在学习STL源码之前我也曾无数次想要弄懂红黑数的原理,奈何每次都被困难打退.说实话,红黑树是真的很难理解,需要不断沉淀才能慢慢体会其妙处.这两天看SGI的RB-tree实现,结合侯捷老师的< ...

  6. 吉首大学2019年程序设计竞赛(重现赛)- A SARS病毒 (矩阵,欧拉降幂)

    题目链接:https://ac.nowcoder.com/acm/contest/992/A 题意:求出长度为n的字符串个数,字符串由A.C.G.T组成,其中A和C必须成对出现. 思路:我们规定:   ...

  7. NIKKEI Programming Contest 2019-2 Task D. Shortest Path on a Line

    Observations ① 从 $1$ 到 $N$ 的最短路一定是不走回头路的.所谓走回头路是指从序号大的点走到序号小的点. 证明:首先,任意从 $1$ 到 $N$ 的路径的最后一步一定不是回头路. ...

  8. 红米K20PRO解锁Bootloader权限并刷入recovery

    手机里反正没什么东西了,聊天记录啊好像也没很重要得了,索性全部清除,刷机玩玩. 把稳定版刷成第三方开发版,这样又有时间去折腾root权限,面具和xposed的各种插件了,嘿嘿. 解锁小米手机 我的账号 ...

  9. 【重启C++】 关于 【类】

    1.什么是抽象类 带有纯虚函数成员的类,称为抽象类.抽象类不能被实例化,因为如果能实例化,调用这个纯虚的成员函数时怎么处理. 2.什么是纯虚函数 纯虚函数是在声明虚函数时被“初始化”为0的函数.声明纯 ...

  10. Ruby Rails学习中:调试信息和 Rails 的三种环境,Users 资源,调试器,Gravatar 头像和侧边栏

    注册 一.调试信息和 Rails 环境 现在咱们要实现的用户资料页面是我们这个应用中第一个真正意义上的动态页面.虽然视图的代码不会动态改变, 不过每个用户资料页面显示的内容却是从数据库中读取的.添加动 ...