# 爬取网络图片
import requests
from lxml import etree
from urllib import request
from queue import Queue # 导入队列
import threading
import os
import re

class Producer(threading.Thread):
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
def __init__(self,page_Queue,image_Queue,*args,**kwargs):
super(Producer,self).__init__(*args,**kwargs)
self.page_Queue = page_Queue
self.image_Queue = image_Queue

def run(self):
while True:
if self.page_Queue.empty():
break
url = self.page_Queue.get()
self.parse_page(url) # 取URL

def parse_page(self,url):
respone = requests.get(url,headers=self.headers)
text = respone.text
html = etree.HTML(text)
imgs = html.xpath("//div[@class='page-content text-center']//a//img")
for img in imgs:
# img_url = img.xpath(".//@data-original")[0]
img_url = img.get("data-original")
# alt = img.xpath(".//@alt")[0] # 提取文件名称
alt = img.get("alt") # 提取文件名称
suffix = os.path.splitext(img_url)[1] # 提取扩展名称
alt = re.sub(r'[\/ :*?"<>|]','',alt) # 使用正则来替换alt名称的特殊字符
filename = alt + suffix
self.image_Queue.put((img_url,filename))

class Consumer(threading.Thread):
def __init__(self,page_Queue,image_Queue,*args,**kwargs):
super(Consumer,self).__init__(*args,**kwargs)
self.page_Queue = page_Queue
self.image_Queue = image_Queue

def run(self):
while True:
if self.page_Queue.empty() and self.image_Queue.empty():
break
image_url,filename = self.image_Queue.get()
path = 'E:\\image\\'
request.urlretrieve(image_url,path+filename)
print('正在存储文件%s'%filename)

def main():
page_Queue = Queue(10)
image_Queue = Queue(10)

# 爬取100页图片
for x1 in range(1,4):
url = 'https://www.doutula.com/photo/list/?page=%d'%x1
page_Queue.put(url)

for x in range(5):
t1 = Producer(page_Queue,image_Queue)
t1.start()

for x in range(5):
t2 = Consumer(page_Queue,image_Queue)
t2.start()

if __name__ == '__main__':
main()

Python多线程爬取某网站表情包的更多相关文章

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

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

  2. python爬虫--爬取某网站电影信息并写入mysql数据库

    书接上文,前文最后提到将爬取的电影信息写入数据库,以方便查看,今天就具体实现. 首先还是上代码: # -*- coding:utf-8 -*- import requests import re im ...

  3. python爬虫--爬取某网站电影下载地址

    前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用 ...

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

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

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

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

  6. [原创]python+beautifulsoup爬取整个网站的仓库列表与仓库详情

    from bs4 import BeautifulSoup import requests import os def getdepotdetailcontent(title,url):#爬取每个仓库 ...

  7. 用python实现多线程爬取影视网站全部视频方法【笔记】

    我拿这个站点作为案例:https://91mjw.com/  其他站点方法都是差不多的. 第一步:获得整站所有的视频连接 html = requests.get("https://91mjw ...

  8. 【Python爬虫案例学习2】python多线程爬取youtube视频

    转载:https://www.cnblogs.com/binglansky/p/8534544.html 开发环境: python2.7 + win10 开始先说一下,访问youtube需要那啥的,请 ...

  9. python多线程爬取-今日头条的街拍数据(附源码加思路注释)

    这里用的是json+re+requests+beautifulsoup+多线程 1 import json import re from multiprocessing.pool import Poo ...

随机推荐

  1. Spring boot未授权访问造成的数据库外联

    一.spring boot 日常测试或攻防演练中像shiro,fastjson等漏洞已经越来越少了,但是随着spring boot框架的广泛使用,spring boot带来的安全问题也越来越多,本文仅 ...

  2. springcloud-config配置异常Cannot clone or checkout repository 和 Authentication is required but no CredentialsProvider has been registered解决过程

    Cannot clone or checkout repository, 出现这个异常,通过检查是因为自己本地没有配置 ssh,所以配置了, https://blog.csdn.net/zy_2818 ...

  3. vulhub-struct2-s2-005

    0x00 漏洞原理   s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码).O ...

  4. Spring Cloud07: Feign 声明式接口调用

    一.什么是Feign Feign也是去实现负载均衡,但是它的使用要比Ribbon更加简化,它实际上是基于Ribbon进行了封装,让我们可以通过调用接口的方式实现负载均衡.Feign和Ribbon都是由 ...

  5. 简单的Java面向对象程序

    上一篇随笔Java静态方法和实例方法的区别以及this的用法,老师看了以后说我还是面向过程的编程,不是面向对象的编程,经过修改以后,整了一个面向对象的出来: /** * 3 延续任务2, 定义表示圆形 ...

  6. 【Azure 机器人】微软Azure Bot 编辑器系列(4) : 使用语言生成功能[LG: Language Generation] (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  7. 基于TensorFlow的服装分类

    1.导包 #导入TensorFlow和tf.keras import tensorflow as tf from tensorflow import keras # Helper libraries ...

  8. SpringCloud、Nginx高并发核心编程 【2020年11月新书 】

    文章太长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典极品 : 三大本< Java 高并发 三部曲 > 面试 + 大厂 + 涨薪必备 疯狂创客圈 经 ...

  9. 【模拟8.03】数颜色(vector//主席树)

    才知道vector在插入值后是可以直接修改的... 那就很简单了 用vector的lowerbound这样的二分操作,提前储存每个颜色的位置 发现交换相对位置不变 关于vector的lowerboun ...

  10. Netty 框架学习 —— 基于 Netty 的 HTTP/HTTPS 应用程序

    通过 SSL/TLS 保护应用程序 SSL 和 TLS 安全协议层叠在其他协议之上,用以实现数据安全.为了支持 SSL/TLS,Java 提供了 javax.net.ssl 包,它的 SSLConte ...