python多线程爬取图片实例
今天试着把前面那个爬取图片的爬虫改成了多线程爬取,虽然最后可以爬取存储图片了,但仍存在一些问题。网址还是那个网址https://www.quanjing.com/category/1286521/1.html,
下面是代码,难点直接在后面注释了。
# 多线程爬取,每个线程爬取一个页面
import requests
import threading
import queue
from bs4 import BeautifulSoup
import re
import time string = "https://www.quanjing.com/category/1286521/"
pipei = re.compile('<img.*?lowsrc="(.*?)"') class spiders(threading.Thread):
name = 1 # 累加变量,用来给每张图片命名 def __init__(self, queue, page):
threading.Thread.__init__(self)
self.queue = queue
self.page = page def run(self): # 定义线程开始函数
while not self.queue.empty():
url = self.queue.get_nowait()
# print(url)
self.request_url(url) def request_url(self, url): # 爬取并存储每一页的图片
html = requests.get(url=url).text
soup = BeautifulSoup(html, 'lxml')
li = str(soup.find_all(attrs={'class': "gallery_list"})) # 根据class标签属性找出所有的图片链接
lianjies = re.findall(pipei, li) # 正则匹配出一页中每一个图片的链接
for lianjie in lianjies:
result = requests.get(url=lianjie).content # 获取图片的二进制数据
# 以二进制的方式存储图片
with open('E:\py project\quanjingwang\image{0}\{1}.jpg'.format(self.page, self.name), 'ab+') as f:
f.write(result)
print("第{0}张存储完成".format(self.name))
self.name += 1 # 命名 # 创建多线程函数 def main():
url_queue = queue.Queue()
for i in range(1, 11):
url = string + str(i) + ".html"
url_queue.put(url)
thread_list = [] # 线程列表
thread_counter = 5 # 线程数量,根据线程数量在相同目录下创建image0-4五个文件夹,用于存储对应线程的爬取结果,image0对应线程1
for i in range(thread_counter):
t = spiders(url_queue, i)
thread_list.append(t)
for t in thread_list:
t.start()
# for t in thread_list:
# print("线程id:%d" % t.ident) # 获取线程id
# print("线程name:%s" % t.getName()) # 获取线程名
for t in thread_list:
t.join() if __name__ == '__main__':
start_time = time.time()
main()
print("五线程用时:%f" % (time.time() - start_time))
刚开始,我想把爬取的所有图片都放在一个文件夹了,但却由于命名的问题,总是被覆盖,每次都只有一页的图片,最后用类中的静态变量解决(name)。不过就在刚在突然想到完全可以换一种命名方式解决,比如每张图片都有一个自己的标题,用标题命名不但解决的这个问题,还更加直观、利用查找。(自己tcl。。。若文章有错误,欢迎大家随之指正。。。)
python多线程爬取图片实例的更多相关文章
- python多线程爬取图片二
上一篇的多线程是使用类创建的,这一次使用函数创建多线程,还是同一个网站https://www.quanjing.com/category/1286521/1.html, 代码如下: # 多线程,自动创 ...
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
- [python爬虫] 爬取图片无法打开或已损坏的简单探讨
本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...
- python多线程爬取世纪佳缘女生资料并简单数据分析
一. 目标 作为一只万年单身狗,一直很好奇女生找对象的时候都在想啥呢,这事也不好意思直接问身边的女生,不然别人还以为你要跟她表白啥的,况且工科出身的自己本来接触的女生就少,即使是挨个问遍,样本量也 ...
- Python多线程爬图&Scrapy框架爬图
一.背景 对于日常Python爬虫由于效率问题,本次测试使用多线程和Scrapy框架来实现抓取斗图啦表情.由于IO操作不使用CPU,对于IO密集(磁盘IO/网络IO/人机交互IO)型适合用多线程,对于 ...
- python多线程知识-实用实例
python多线程使用场景:IO操作,不适合CPU密集操作型任务 1.多个线程内存共享 2.线程同时修改同一份数据需要加锁,mutex互斥锁 3.递归锁:多把锁,锁中有锁 4.python多线程, ...
- Python 爬虫 爬取图片入门
爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 用户看到的网页实质是由 HTML 代码构成的,爬 ...
- Python 多线程爬取站酷(zcool.com.cn)图片
极速爬取下载站酷(https://www.zcool.com.cn/)设计师/用户上传的全部照片/插画等图片. 项目地址:https://github.com/lonsty/scraper 特点: 极 ...
- Spider-Python实战之通过Python爬虫爬取图片制作Win7跑车主题
1. 前期准备 1.1 开发工具 Python 3.6 Pycharm Pro 2017.3.2 Text文本 1.2 Python库 requests re urllib 如果没有这些Python库 ...
随机推荐
- mac 端安装JAVA开发环境
一.maven安装 下载地址 https://maven.apache.org/download.cgi 下载 apache-maven-3.5.2-bin-zip 将下载的文件放在某路径下 修改 ...
- JQUERY名称冲突
jQuery 使用 $ 作为符号 jQuery 介绍的简单方法. 其他 JavaScript 库函数(例 Prototype)使用相同的 $ 符号. jQuery 使用命名 noConflict() ...
- Bootstrap 添加到项目
至少在项目中添加以下三个文件 1 添加css文件 <link href="~/Bootstrap3.3.7/css/bootstrap.min.css" rel=" ...
- block-chain java source
source:github.com/enderlu/Swiftglobal ide:idea ,要安装Lombok plugin 配置: -Dspring.config.location=file:D ...
- Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法
原文:Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法 [函数名称] 二值图像轮廓提取 ContourExtraction(WriteableBitm ...
- Central Subscriber Model Explained
原文 http://www.sqlrepl.com/sql-server/central-subscriber-model-explained/ The majority of SQL Server ...
- 内存页面的各种属性(就是Read, Write, Execute的组合)
PAGE_NOACCESS 禁止写入执行读取查看进程内存区域能发现,NOACCESS属性的内存页面都是FREE状态的(未提交使用的内存区域),只有内存区域最后的0x7FFE1000-0x7FFF000 ...
- ubuntu 16.04 android studio 开发环境搭建
安装步骤: 1. 安装 Java developer kit 2.安装 Android developer kit 3.安装 Android studio 4.真机调试 第一次用Linux,命令基本不 ...
- Dlib 19.4(算法,压缩,图像处理,机器学习,Meta编程,网络,HTTP服务器)
Algorithms API Wrappers Bayesian Nets Compression Containers Graph Tools Image Processing Linear Alg ...
- Windows下配置QT OpenCV
OpenCV-Study:Windows下配置OpenCV 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:XP OpenCV版本:2.4 ...