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()
- spring:如何用代码动态向容器中添加或移除Bean ?
- WebComponent魔法堂:深究Custom Element 之 标准构建
- druid 数据源 使用属性文件的一个坑
- Angular企业级开发(3)-Angular MVC实现
- spring: 加载远程配置
- java:如何让程序按要求自行重启?
- Angular学习-指令入门
- java:如何让程序按要求自行重启?
- linux:nohup 不生成 nohup.out的方法
- 让VIM支持Python2 by update-alternatives
- Angular中ngCookies模块介绍
- 如何让jboss eap 6.2+ 的多个war应用共享 jar 包?
- scala 学习笔记(07) 一等公民的函数
- 让BASH,VIM美美的Powerline
- 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 数组属性和方法
- Android 设置主题实现点击波纹效果的示例
- 更新Android Studio 3.0碰到的问题小结
- android实现一个图片验证码倒计时功能
- Android添加glide库报错Error:Failed to resolve:com.android.support:26.0.2的解决
- Android多线程下载示例详解
- 详解Android Gradle插件3.0挖坑日记
- Android开发之拼音转换工具类PinyinUtils示例
- Android多线程断点续传下载示例详解
- Android设备与外接U盘实现数据读取操作的示例
- [Alibaba-ARouter]浅谈简单好用的Android页面路由框架
- android屏幕圆角实现方法的示例代码
- Android开发中日期工具类DateUtil完整实例
- Android模仿实现微博详情页滑动固定顶部栏的效果实例
- Android EventBus(普通事件/粘性事件)详解
- Android实现EventBus登录界面与传值(粘性事件)