Python大作网图片采集下载,多线程图片爬虫
时间:2022-07-22
本文章向大家介绍Python大作网图片采集下载,多线程图片爬虫,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大作——找灵感,用大作,一个比较知名的素材类网站,里面涵盖多行业图片素材,类似于花瓣网,发现这种类型的素材网站还是比较多的,Python大作网图片采集下载,多线程图片爬虫,多线程的方式是以前最早玩的线程池的方式实现的,但是发现好像容易出错。
同样的抓包分析图片数据
发现数据还是比较多,我们耐心查找入口
对应的json数据,一目了然
大作网图片地址还做了反爬处理,其实一般都是加一个refer地址就能搞定!
关于图片数据,我们也可以通过浏览器抓包,清晰的看到
'referer': 'https://www.bigbigwork.com/tupian/image/20148309331.html',
一般添加上这个字段就能顺利爬取下载图片
运行效果:
附源码:
#大作网采集
#20200507by 微信:huguo00289
# -*- coding: UTF-8 -*-
import requests,time,json
from fake_useragent import UserAgent
from multiprocessing.dummy import Pool as ThreadPool
def ua():
ua=UserAgent()
headers={"User-Agent":ua.random}
return headers
def get_list():
img_urls=[]
url="https://www.bigbigwork.com/q?w=texture%20patterns&c=%E7%BA%B9%E7%90%86&h=%E5%B7%A5%E4%B8%9A%E8%AE%BE%E8%AE%A1"
response=requests.get(url,headers=ua(),timeout=6).content.decode('utf-8')
time.sleep(1)
response_dict=json.loads(response)
print(len(response_dict['data']))
datas=response_dict['data']
for data in datas:
img_urls.append(data['bUrl'])
return img_urls
#单线程
def tps(img_urls):
ua = UserAgent()
headers = {
'referer': 'https://www.bigbigwork.com/tupian/image/20148309331.html',
'User-Agent': ua.random,
}
i=1
for img_url in img_urls:
r = requests.get(img_url,headers=headers,timeout=6)
time.sleep(1)
with open(f'{i}.jpg','wb')as f:
f.write(r.content)
print("下载图片成功")
i=i+1
#多线程调用版本
def tp(img_url):
ua = UserAgent()
headers = {
'referer': 'https://www.bigbigwork.com/tupian/image/20148309331.html',
'User-Agent': ua.random,
}
img_name=img_url.split('/')[-1]
r = requests.get(img_url,headers=headers,timeout=6)
time.sleep(1)
with open(img_name,'wb')as f:
f.write(r.content)
print(f"{img_name}下载图片成功")
def run():
img_urls=get_list()
try:
# 开4个 worker,没有参数时默认是 cpu 的核心数
pool = ThreadPool()
results = pool.map(tp, img_urls)
pool.close()
pool.join()
print("采集所有图片完成!")
except:
print("Error: unable to start thread")
if __name__=='__main__':
run()
- 接口测试 | urllib篇 18 urllib介绍
- 【专知-Deeplearning4j深度学习教程01】分布式Java开源深度学习框架DL4j安装使用: 图文+代码
- .Net Core Runtime安装说明
- 【专知-Deeplearning4j深度学习教程02】用ND4J自己动手实现RBM: 图文+代码
- 【专知-Deeplearning4j深度学习教程03】使用多层神经网络分类MNIST数据集:图文+代码
- TypeScript 1.6发布:完全支持React/JSX
- 【专知-Java Deeplearning4j深度学习教程04】使用CNN进行文本分类:图文+代码
- sql server之数据库语句优化
- 【专知-Java Deeplearning4j深度学习教程05】无监督特征提取神器—AutoEncoder:图文+代码
- 平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】
- HDU 2689 Sort it【树状数组】
- BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】
- Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】
- GeetTest~下一代验证(附C#案例)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Linux系统上安装Spring boot应用的教程详解
- 使用openssl 生成免费证书的方法步骤
- linux cd的含义以及用法
- leetcode栈之比较含退格的字符串
- CentOS使用本地yum源搭建LAMP环境图文教程
- 清除CentOS 6或CentOS 7上的磁盘空间的方法
- leetcode栈之二叉树的前序遍历
- 解决Linux下Mysql5.7忘记密码问题
- CentOS8.0 安装配置ftp服务器的实现方法
- Linux实现自动登录的实例讲解
- Linux中date命令转换日期提示date: illegal time format问题解决
- leetcode队列之最近的请求次数
- 安防视频云服务EasyCVR集成海康SDK时语音对出现杂音问题,如何解决?
- arm linux利用alsa驱动并使用usb音频设备
- linux 磁盘转移空间的方法