用python多线程抓取网站图片,速度极快
时间:2022-07-22
本文章向大家介绍用python多线程抓取网站图片,速度极快,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
用python多线程抓取网站图片,速度极快。直接贴代码吧
import re
import urllib
import threading
import time
import socket
socket.setdefaulttimeout(30)
urls=[]
j=0
for i in xrange(1,81):
if (i-1)%4 == 0:
j += 1
if ((j-1)%5) == 0 :
j=1
site='http://xx.com/xz%02d/images/' %(j,i)
urls.append(site)
print urls[i-1]
def mkdir(path):
# 引入模块
import os
# 去除首位空格
path=path.strip()
# 去除尾部 符号
path=path.rstrip("\")
# 判断路径是否存在
# 存在 True
# 不存在 False
isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
print path+u' 创建成功'
# 创建目录操作函数
os.makedirs(path)
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print path+u' 目录已存在'
return False
def cbk(a,b,c):
'''''回调函数
@a: 已经下载的数据块
@b: 数据块的大小
@c: 远程文件的大小
'''
per = 100.0 * a * b / c
if per > 100:
per = 100
print '%.2f%%' % per
#url = 'http://www.sina.com.cn'
local = 'd:\mysite\pic\'
d=0
mutex = threading.Lock()
# mutex1 = threading.Lock()
class MyThread(threading.Thread):
def __init__(self, url, name):
threading.Thread.__init__(self)
self.url=url
self.name=name
def run(self):
mutex.acquire()
print
print 'down from %s' % self.url
time.sleep(1)
mutex.release()
try:
urllib.urlretrieve(self.url, self.name)
except Exception,e:
print e
time.sleep(1)
urllib.urlretrieve(self.url, self.name)
threads=[]
for u in urls[84:]:
d += 1
local = 'd:\mysite\pic\%d\' %d
mkdir(local)
print 'download begin...'
for i in xrange(40):
lcal = local
url=u
url += '%03d.jpg' %i
lcal += '%03d.jpg' %i
th = MyThread(url,lcal)
threads.append(th)
th.start()
# for t in threads:
# t.join()
print 'over! download finished'
其中urls为图片的网址,需要根据自己需要来改,例子中用xx.com代替。
在介绍个单线程下载的例子吧,以抓取暴走漫画图片为例:
from bs4 import BeautifulSoup
import os, sys, urllib2,time,random
# 创建文件夹,昨天刚学会
path = os.getcwd() # 获取此脚本所在目录
new_path = os.path.join(path,u'暴走漫画')
if not os.path.isdir(new_path):
os.mkdir(new_path)
def page_loop(page=1):
url = 'http://baozoumanhua.com/all/hot/page/%s?sv=1389537379' % page
content = urllib2.urlopen(url)
soup = BeautifulSoup(content)
my_girl = soup.find_all('div',class_='img-wrap')
for girl in my_girl:
jokes = girl.find('img')
link = jokes.get('src')
flink = link
print flink
content2 = urllib2.urlopen(flink).read()
#with open(u'暴走漫画'+'/'+time.strftime('%H-%M-%S')+random.choice('qwertyuiopasdfghjklzxcvbnm')+flink[-5:],'wb') as code: #在OSC上现学的
with open(u'暴走漫画'+'/'+flink[-11:],'wb') as code:
code.write(content2)
page = int(page) + 1
print u'开始抓取下一页'
print 'the %s page' % page
page_loop(page)
page_loop()
- Hadoop数据分析平台实战——080HBase介绍和安装离线数据分析平台实战——080HBase介绍和安装
- Hadoop数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)离线数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)
- ECJTUACM16 Winter vacation training #4 题解&源码
- Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍离线数据分析平台实战——090HBase shell客户端和Java Api介绍
- Hadoop数据分析平台实战——140Hive函数以及自定义函数讲解离线数据分析平台实战——140Hive函数以及自定义函数讲解
- 深入理解树状数组
- Codeforces 712C Memory and De-Evolution
- Codeforces 712B Memory and Trident
- Hadoop数据分析平台实战——110Hive介绍和Hive环境搭建离线数据分析平台实战——110Hive介绍和Hive环境搭建
- 干货|普通反爬虫机制的应对策略
- python基础-字符串与编码
- Codeforces 708A Letters Cyclic Shift
- Codeforce 712A Memory and Crow
- 每日一水之strcmp用法
- 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 数组属性和方法