今天试着把前面那个爬取图片的爬虫改成了多线程爬取,虽然最后可以爬取存储图片了,但仍存在一些问题。网址还是那个网址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. Qt程序调试之Q_ASSERT断言(条件为真则跳过,否则直接异常+崩溃)

    在使用Qt开发大型软件时,难免要调试程序,以确保程序内的运算结果符合我们的预期.在不符合预期结果时,就直接将程序断下,以便我们修改. 这就用到了Qt中的调试断言 - Q_ASSERT. 用一个小例子来 ...

  2. python发送电子邮件

    或者收发邮件都得小心翼翼的,怕一不小心被有心人瞧见,又得被说说. 为了能发邮件而不被发现,嘿嘿.我就用python写了个邮件发送程序,用控制台控制,不了解的人一定以为哥还在编程工作呢.哈哈. 以下简介 ...

  3. IAA32过程调用保护规则注册

    因为操作系统共享性质,所以,寄存器已成为各种处理或共享资源的处理.然后,该过程发生 当所谓的.假设呼叫者使用内部寄存器值.但这个寄存器的内容,很可能在该呼叫者的执行的过程中改变,用过程执行之前,对该寄 ...

  4. Qt移动应用开发(六):QML与C++互动

    Qt移动应用开发(六):QML与C++互动 上一篇文章讲到了在Qt Quick中实现场景切换的一种可能的方法,场景切换是诸如游戏等应用在内必需要面临的技术难点,所以场景切换并没有通行的方法,依据自己的 ...

  5. HBase 数据备份

    HBase提供了备份API,直接使用shell脚本可以叫它.如下面的命令的详细信息: hbase org.apache.hadoop.hbase.mapreduce.Export 'user' /hb ...

  6. POJ1185:火炮(减少国家)

    Description 命令将军打算N*M该网络格他们的炮兵部队部署在地图上.一个N*M该地图由N行M列,每个地图格它可以是山(使用"H" 表示),也可能是平原(用"P& ...

  7. gtest写了第一个测试用例错误和结算过程

    安装好gtest后,编写第一个測试案例test_main.cpp #include <iostream> #include <gtest/gtest.h> using name ...

  8. 2-22-实现jsp通过tomcat连接mysql

    所有软件的版本如下: MySQL-Connector-Java: mysql-connector-java-5.1.36 Tomcat: apache-tomcat-8.0.26 JDK: jdk-8 ...

  9. XF 列表视图分组列表填充

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. 用MVVM模式开发中遇到的零散问题总结(2)

    原文:用MVVM模式开发中遇到的零散问题总结(2) 本节目录: 1.解决动画属性被劫持问题 2.设置页面焦点默认所在对象 3.XAML模拟键盘按键 4.DataGrid数据源绑定到复杂格式(dynam ...