今天试着把前面那个爬取图片的爬虫改成了多线程爬取,虽然最后可以爬取存储图片了,但仍存在一些问题。网址还是那个网址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多线程爬取图片实例的更多相关文章

  1. python多线程爬取图片二

    上一篇的多线程是使用类创建的,这一次使用函数创建多线程,还是同一个网站https://www.quanjing.com/category/1286521/1.html, 代码如下: # 多线程,自动创 ...

  2. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  3. [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...

  4. python多线程爬取世纪佳缘女生资料并简单数据分析

    一. 目标 ​ 作为一只万年单身狗,一直很好奇女生找对象的时候都在想啥呢,这事也不好意思直接问身边的女生,不然别人还以为你要跟她表白啥的,况且工科出身的自己本来接触的女生就少,即使是挨个问遍,样本量也 ...

  5. Python多线程爬图&Scrapy框架爬图

    一.背景 对于日常Python爬虫由于效率问题,本次测试使用多线程和Scrapy框架来实现抓取斗图啦表情.由于IO操作不使用CPU,对于IO密集(磁盘IO/网络IO/人机交互IO)型适合用多线程,对于 ...

  6. python多线程知识-实用实例

    python多线程使用场景:IO操作,不适合CPU密集操作型任务   1.多个线程内存共享 2.线程同时修改同一份数据需要加锁,mutex互斥锁 3.递归锁:多把锁,锁中有锁 4.python多线程, ...

  7. Python 爬虫 爬取图片入门

    爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 用户看到的网页实质是由 HTML 代码构成的,爬 ...

  8. Python 多线程爬取站酷(zcool.com.cn)图片

    极速爬取下载站酷(https://www.zcool.com.cn/)设计师/用户上传的全部照片/插画等图片. 项目地址:https://github.com/lonsty/scraper 特点: 极 ...

  9. Spider-Python实战之通过Python爬虫爬取图片制作Win7跑车主题

    1. 前期准备 1.1 开发工具 Python 3.6 Pycharm Pro 2017.3.2 Text文本 1.2 Python库 requests re urllib 如果没有这些Python库 ...

随机推荐

  1. opencart框架分析与概况

    1. Opencart的系统架构 1.1. 架构分析 Opencart是有自己的开发架构的,其架构的核心都在system\engine 下,访问控制统一用 根目录下的 index.php 来协调. R ...

  2. ng-alain 复用标签相关设置

    排除复用 import { ReuseTabMatchMode, ReuseTabService } from '@delon/abc'; export class StartupService { ...

  3. WPF特效-鱼游动动画

    原文:WPF特效-鱼游动动画   实现思路:           通过VisualBrush Binding方式获取鱼局部图像,在Viewport3D中创建ModelVisual3D块并把获取到的局部 ...

  4. v-charts显示标题

    使用v-charts的时候,如果要显示标题需要以下操作 1. 加入:title props <ve-pie :title="chartTitle" :data="c ...

  5. DataContext和ItemSource

    一对多的关系DataContext为上下文,绑定数据源ItemSource取上下文中的某属性,会一级一级往上找属性 一般ItemSource的绑定,绑定到Grid/DataGrid一类容器上,底下的控 ...

  6. WPF 自定义范围分组

    <Window x:Class="ViewExam.MainWindow"        xmlns="http://schemas.microsoft.com/w ...

  7. WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)

    原文:WPF之路--实现自定义虚拟容器(实现VirtualizingPanel) 源码下载地址: http://download.csdn.net/detail/qianshen88/6618033 ...

  8. 树莓派3B 无显示器,无键盘,无Linux系统,无网线 配置WIFI连接

    #1.基本需求#2.烧写镜像#3.用有线网(网线)连接PC,实现远程操作树莓派#4.接入无线网,通过其它电脑远程控制树莓派#5.使用PC共享的热点Wifi远程控制树莓派 #1.基本需求 树莓派 USB ...

  9. Qt 事件处理 快捷键(重写eventFilter的函数,使用Qt::ControlModifier判断)

    CTRL+Enter发送信息的实现 在现在的即时聊天程序中,一般都设置有快捷键来实现一些常用的功能,类似QQ可以用CTRL+Enter来实现信息的发送. 在QT4中,所有的事件都继承与QEvent这个 ...

  10. C#有哪几种定时器

    1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers.Timer类里 System.Windows.For ...