临近期末考试,但是根本不想复习!啊啊啊啊啊啊啊!!!!

于是做了一个爬虫,网址为 https://yande.re,网页图片为动漫美图(图片带点颜色........宅男福利

github项目地址为:https://github.com/MyBules/yande_pider

多线程代码分为两个版本:一个是基于多页面多线程,一个是基于单页面多线程

一下是第一种代码:

'''
基于多页面多线程
'''
import os # 引入文件模块
import re # 正则表达式
import urllib.request
import threading # 连接网页并返回源码
def open_url(url):
try:
req = urllib.request.Request(url)
req.add_header("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
response = urllib.request.urlopen(req)
status_code = response.code
html = response.read()
return html
except:
print(url + "")
return 404 def mkdir(path):
'''
:param path: 路径
:return:
'''
# 引入模块
import os # 去除首位空格
path = path.strip()
# 去除尾部 \ 符号
path = path.rstrip("\\")
# 判断路径是否存在
# 存在 True
# 不存在 False
isExists = os.path.exists(path) # 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(path)
print(path + ' 创建成功')
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print(path + ' 目录已存在')
return False def Yande1(i):
imgs = 1
url = 'https://yande.re/post?page=' + str(i)
floder = "E:\\Python\\爬虫\\yande\\img\\page" + str(i)
mkdir(floder) html = open_url(url)
html = html.decode('gbk', 'ignore')
img_adds = []
img_adds = re.findall(r'<a class="directlink largeimg" href="([^"]+\.jpg)"', html)
for i in img_adds:
filename = floder + "\\" + str(imgs) + '.jpg'
imgs += 1
img_html = open_url(i)
if img_html == 404:
continue
with open(filename, 'wb') as f:
f.write(img_html)
print(i + ' 下载完成......') exitflag = 0 class myThread(threading.Thread):
def __init__(self, threadID, name, list):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.list = list
def run(self):
print("开始线程:" + self.name)
# threadLock.acquire()
get_img(self.name, self.list)
# threadLock.release()
print("退出线程:"+ self.name) def get_img(threadname, list):
if len(list):
for i in list:
if exitflag:
threadname.exit()
Yande1(i) if __name__ == '__main__':
pages1 = int(input('请输入你要下载的起始页面数:'))
pages2 = int(input('请输入你要下载的末尾页面数:'))
mkdir('img') # for i in range()
list1 = []
list2 = []
list3 = []
for i in range(pages1, pages2+1):
if i % 3 == 0:
list3.append(i)
if i % 3 == 1:
list1.append(i)
if i % 3 == 2:
list2.append(i)
threadLock = threading.Lock()
threads = []
thread1 = myThread(1, "thread-1", list1)
thread2 = myThread(2, "thread-2", list2)
thread3 = myThread(3, "thread-3", list3)
thread1.start()
thread2.start()
thread3.start()
threads.append(thread1)
threads.append(thread2)
threads.append(thread3) for t in threads:
t.join()
print("退出主线程")

经测试,两种方法速度相差不大。

第二种方法放在github项目地址里了,如果各位游客是为了学习的话,第二种方法的代码还是去看一下较好。

Python多线程爬虫爬取网页图片的更多相关文章

  1. node:爬虫爬取网页图片

    代码地址如下:http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片 ...

  2. erlang 爬虫——爬取网页图片

    说起爬虫,大家第一印象就是想到了python来做爬虫.其实,服务端语言好些都可以来实现这个东东. 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌 ...

  3. Python爬虫爬取网页图片

    没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来. 今天逛贴吧看见好多美图,可是图片有点多,不想一张一张地复制粘贴 ...

  4. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  5. java爬虫-简单爬取网页图片

    刚刚接触到“爬虫”这个词的时候是在大一,那时候什么都不明白,但知道了百度.谷歌他们的搜索引擎就是个爬虫. 现在大二.再次燃起对爬虫的热爱,查阅资料,知道常用java.python语言编程,这次我选择了 ...

  6. python爬虫-爬取百度图片

    python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...

  7. python requests库爬取网页小实例:爬取网页图片

    爬取网页图片: #网络图片爬取 import requests import os root="C://Users//Lenovo//Desktop//" #以原文件名作为保存的文 ...

  8. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  9. python3爬虫爬取网页思路及常见问题(原创)

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

随机推荐

  1. talend工具整理文件并出力文件到Excel当中

    问题描述: 每天都会生成一定的txt文件,txt文件当中含有复数个个人的信息,把每个个人信息都抽出来之后放到Excel文件的一览里面. 解决思路: 1.txt文件里面的信息有多件,每一件生成一个临时的 ...

  2. 采用霍夫曼编码(Huffman)画出字符串各字符编码的过程并求出各字符编码 --多媒体技术与应用

    题目:有一个字符串:cabcedeacacdeddaaaba,问题: (1)采用霍夫曼编码画出编码的过程,并写出各字符的编码 (2)根据求得的编码,求得各编码需要的总位数 (3)求出整个字符串总编码长 ...

  3. ruby tk实现简易计算器

    #encding:GBK require 'tk' module Const WIDTH_OF_PANEL = 370 HEIGHT_OF_PANEL = 520 SIZE_OF_BUTTON_H = ...

  4. MySQL 配置参数优化

    MySQL 配置参数优化 1.修改back_log参数值:由默认的50修改为500 back_log=500back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中 ...

  5. 【转帖】一文看懂docker容器技术架构及其中的各个模块

    一文看懂docker容器技术架构及其中的各个模块 原创 波波说运维 2019-09-29 00:01:00 https://www.toutiao.com/a6740234030798602763/ ...

  6. 解决maven项目无法读取src/main/java目录下面的配置文件问题

    我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录. 但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的ma ...

  7. 剑指offer57:二叉树的下一个结点

    1 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2 思路和方法 中序遍历,下一个结点有两种情况 a ...

  8. 单例模式中volatile关键字的作用

    背景&问题 在早期的JVM中,synchronized存在巨大的性能开销.因此,有人想出了一个"聪明"的技巧:双重检查锁定(Double-Checked Locking). ...

  9. WUSTOJ 1239: n皇后问题(Java)

    题目链接:

  10. oj上的测试点信息

    Accepted                          通过!(AC) Wrong Answer                  答案错.(WA) Runtime Error      ...