# 爬取网络图片
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. Linux下Flash-LED的处理

    Linux下Flash-LED的处理 一些LED设备提供两种模式-torch和flash.在LED子系统中,LED类(参见Linux下的LED处理)和LED Flash类,分别支持这些模式.torch ...

  2. runtime系统的Cello

    runtime系统的Cello 通过充当一个现代的.功能强大的runtime系统,Cello使许多以前在C中不切实际或笨拙的事情变得简单,例如: 通用数据结构 多态函数 接口/类型类 构造函数/析构函 ...

  3. python_selenium_键盘事件

    引言 ----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的  keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrl+a,Ctrl+v等. 举例: #cording ...

  4. 用CLion实现本地方法并给java调用

    众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能.但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二.java提供了jni(Java Native I ...

  5. 【Java面试真题】剑指Offer53.2——0~n-1中缺失的数字(异或、二分两种解法)

    [Java实现]剑指Offer53.2--0~n-1中缺失的数字:面试真题,两种思路分享 前面有另一道面试题[Java实现]剑指offer53.1--在排序数组中查找数字(LeetCode34:在排序 ...

  6. 日常Bug排查-Nginx重复请求?

    日常Bug排查-Nginx重复请求? 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,其中不乏一些看起来很低级但很容易犯的问题. 问题现场 有一天运维突然找到 ...

  7. echarts迁移图动态加载

    迁移图 获取迁移城市的经纬度 可以调用高德的接口,实现根据地名找寻经纬度的方法 #!/usr/bin/env python3 #-*- coding:utf-8 -*- ''' 利用高德地图api实现 ...

  8. [INS-32033] Central Inventory location is not writable

    这个是因为之前安装过一次图形界面,已经创建过Inventory,所以会报错. 解决:删除oraInventory这个目录.

  9. 聊聊 Feign 的实现原理

    What is Feign? Feign 是⼀个 HTTP 请求的轻量级客户端框架.通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文 ...

  10. 20204107 孙嘉临《Python程序设计》实验一报告

    课程:<python程序设计> 班级:2041 姓名:孙嘉临 学号:20204107 实验教师:王志强 实验日期:2021年4月12日 必修/选修:公选课 ##一.实验内容 1.熟悉Pyt ...