相关网站:https://www.huashi6.com/

"""
爬取画师通网站,本来想利用xpath,但数据不在源文件中,失败
通过浏览器检查功能找到了搜索结果页面的对应文件
利用线程池提高效率思路:
1.提示用户输入关键词
2.构建第一个url,发出请求,获取响应,得到页面数
3.构建所有的url,创建队列,进行多进程爬取
4.解析响应数据,下载其中所有图片
"""from urllib import request
import requests
from UA_IP_Pool import *
import os
import time
from queue import Queue
import threading
from concurrent.futures import ThreadPoolExecutor#新建图片存储文件夹
def Make_file(keyword):file_path = "C:\\Users\\kangheng\\Desktop\\MyPicture\\" + request.unquote(keyword)try:os.mkdir(file_path)except:passfinally:return file_path#请求搜索结果页面,获取响应,得到pageCount数据
def Get_pageCount(url):response = requests.get(url, headers = Get_UA(), proxies = Get_http_IP(), verify=False, timeout = 5)response.encoding = "utf-8"#print(response.text)page_Count = response.json()["data"]["pageCount"]print("总页数为{}".format(page_Count))return page_Count#获取图片信息,下载图片
def Get_information(url, mypicture_path):response = requests.get(url, headers = Get_UA(), proxies = Get_http_IP(), verify=False, timeout = 5)response.encoding = "utf-8"# 获取锁,用于线程同步threadLock = threading.Lock()threadLock.acquire()title_pat = '"title":"(.*?)",'picture_part_pat = '"path":"(.*?)",'title_rst = re.compile(title_pat).findall(response.text)picture_part_rst = re.compile(picture_part_pat).findall(response.text)for i in range(len(title_rst)):#规范文件命名for j in range(len(title_rst[i])):if title_rst[i][j] == "/" or title_rst[i][j] == "\\" or title_rst[i][j] == ":" or title_rst[i][j] == "*" or title_rst[i][j] == "<" or title_rst[i][j] == ">" or title_rst[i][j] == "|" or title_rst[i][j] == "?" or title_rst[i][j] == '"':title_rst[i] = title_rst[i][:j]breakelse:passres = requests.get("https://img2.huashi6.com/"+picture_part_rst[i], headers = Get_UA(), proxies = Get_http_IP(), verify=False, timeout = 5)with open(mypicture_path+"\\"+title_rst[i]+".jpg", "wb+") as fp:fp.write(res.content)print("图片下载完成!")# 释放锁,开启下一个线程threadLock.release()def main():#用户输入keyword = request.quote(input("请输入你想搜索的图片关键词:"))#获取文件夹位置信息mypicture_path = Make_file(keyword)#获取程序开始爬取的时间戳start_time = time.time()#通过第一个url获取页面数first_url = f"https://rt.huashi6.com/front/works/search?index=1&title={keyword}"page_Count = Get_pageCount(first_url)#创建url队列url_queue = Queue()for index in range(1, page_Count+1):#将构建的每个url都送入队列url = f"https://rt.huashi6.com/front/works/search?index={index}&title={keyword}"url_queue.put(url)#print(url)#进程池获取每页with ThreadPoolExecutor(10) as t:  # 创建一个最大容纳数量为10的线程池for i in range(1, url_queue.qsize()+1):t.submit(lambda p: Get_information(*p), [url_queue.get(), mypicture_path]) # 通过submit提交执行的函数到线程池中#获取程序结束爬取的时间戳finish_time = time.time()print("对应图片全部爬取完成!(共耗时{}秒)".format(finish_time-start_time))if __name__ == "__main__":while True:main()input_next = input("是否继续爬取?(请输入yes 或 no)")if input_next == "no":print("程序终止!!")break

希望路过的小伙伴可以点个赞,满足一下我小小的虚荣心,同时欢迎大佬提出改进意见或提供新思路,在这里道谢了!!!

爬取图片案例2(Ajax网页异步加载、Queue队列、线程池)相关推荐

  1. Flask + Ajax + Mysql 实现网页异步加载(一)

    滚动条滑到底部时候,在当前页面加载下一页数据: 滚动条到达顶部时候,刷新当前页面. 一.flask 实现的服务器端 @app.route('/',methods=['GET','POST']) def ...

  2. ajax异步查询demo,ASP.NET中AJAX的异步加载(Demo演示)

    此次的demo是一个页面,页面上有两行字,然后后面用ajax,使用一个下拉框去替换第一行文字[/code] 第一个是被替换的网页 var xmlhttprequest; function create ...

  3. 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]

    利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数 ...

  4. php ajax 下载图片路径,JavaScript_批量下载对路网图片并生成html的实现方法,对路使用ajax实现异步加载内容 - phpStudy...

    批量下载对路网图片并生成html的实现方法 对路使用ajax实现异步加载内容,在它的js代码中找到了相关代码 type : 'POST', url : '/index.php/request/new_ ...

  5. SSH框架下 ajax 实现异步加载的案例

    ajax代码 function search(current_page) {var startTime = $("#time1").val();var status = ($(&q ...

  6. Ajax 滚动异步加载数据

    第一种情况:单个div滚动 HTML <body> <!-- search start --> <div class="search" #if($m_ ...

  7. Python爬虫 解决异步加载问题--以爬取PEXELS图片为例

    第一次尝试爬取->[Python爬虫]爬虫实例:三种方式爬取PEXELS图片 在爬取PEXELS时,遇到了这样问题: 页面使用Ajax的异步加载技术来实现分页,所以通过request.text无 ...

  8. artdialog 异步加载页面 生成验证码

    artdialog  异步加载一个页面 需求:例如现在好多网站的登录或注册 都是点击弹出一个层出来 然后在上面登录.注册 这个登录可能在网站的每个页面都会有,但是我们又不能在每个页面都这一段html加 ...

  9. cocos2dx 3.3 异步加载纹理

    这里以3d场景加载为例,2d情况类似. 先同步加载模型数据和尺寸缩小了100倍的贴图,创建mesh.然后异步加载所有精细纹理并每加载完一个就替换一个,并进入场景. 如此做法的效果是当刚进入场景时看到的 ...

  10. 爬虫案例:ajax异步加载,爬取豆瓣电影排行榜

    from urllib.request import Request,urlopen from fake_useragent import UserAgent #导入相应的库 base_url ='h ...

最新文章

  1. mass Framework event模块 v4
  2. mysql 下 计算 两点 经纬度 之间的距离 计算结果排序
  3. java读取文件指定位置_Java读取指定路径下的文件列表
  4. search.php制作,重写搜索Search类
  5. 湖南师大计算机学院院长,董新汉(数学与计算机科学学院)老师 - 湖南师范大学 - 院校大全...
  6. linux ftp服务器已拒绝访问,linux ftp服务器已拒绝
  7. ceph 数据库_Facebook打开了动画库,Ceph在Red Hat找到了新家,等等
  8. 【es】es 分布式一致性原理剖析(二)-Meta篇
  9. vue 保存时清空iuput_Vue 一键清空表单的实现方法
  10. 百万级数据库优化方案大全
  11. Python Pycharm 对代码进行TODO标记注释
  12. 在那个时候根本没有计算机房,王德厚:我们现在的写作环境与王瑶先生那个时候没有根本区别...
  13. Jupyter notebook中的Markdown单元格(4)图片
  14. 1年2轮融资团队2倍扩张,180人的产研团队如何有序协同?
  15. Linux下提高硬盘读写速度
  16. flume 从基础到高阶
  17. valist:解决变参问题
  18. Intel 酷睿 i3、i5、i7 CPU 处理器之间有什么区别
  19. 逻辑卷增加根目录空间
  20. HTML5+CSS期末大作业:个人主页介绍主题——-我们的挚爱 (7页) 学生DW网页设计作业成品 大学生个人网站作业模板 简单个人网页制作

热门文章

  1. RAC-iOS中基本用法
  2. 关于chm电子书无法显示网页的解决方
  3. AI算法可帮助因气候变化而流离失所的数百万难民找到新家了!
  4. html期末设计作业——品牌红酒销售网页模板(4页) html网页设计期末大作业_网页设计平时作业
  5. ios 图片合成幻灯片_为iPad构建iOS幻灯片应用程序
  6. 最大公约数(GCD)和最小公倍数(LCM)
  7. RAR解压、压缩命令
  8. uboot移植之迷雾解码
  9. react.createContext
  10. 记录一次帝国CMS模板被木马入侵后清理的过程,其他CMS类似【大佬勿喷】