设为首页 加入收藏

TOP

Python通过代理多线程抓取图片(二)
2014-11-24 03:11:44 来源: 作者: 【 】 浏览:8
Tags:Python 通过 代理 线程 图片
x = imgurl.split('.')[-1] #获取图片后缀
pic_name = str(random.randint(0,10000000000))+'.'+pic_suffix
cookies = urllib2.HTTPCookieProcessor()
randomCheckedProxy = random.choice(checkedProxyList) #随机取一组代理服务器
proxyHandler = urllib2.ProxyHandler({"http" : r'http://%s:%s' %(randomCheckedProxy[0],randomCheckedProxy[1])})
opener = urllib2.build_opener(cookies,proxyHandler)
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0')]
urllib2.install_opener(opener)
try:
data_img = opener.open(imgurl,timeout=self.timeout)
f = open (pic_name,'wb')
f.write(data_img.read())
f.close()
except:
continue
def run(self):
self.downloadimg()


if __name__ == "__main__":
getThreads = []
checkThreads = []
imgurlList('http://www.ivsky.com')
getPicThreads = []


#对每个目标网站开启一个线程负责抓取代理
for i in range(len(targets)):
t = ProxyGet(targets[i])
getThreads.append(t)


for i in range(len(getThreads)):
getThreads[i].start()


for i in range(len(getThreads)):
getThreads[i].join()


print '.'*10+"总共抓取了%s个代理" %len(rawProxyList) +'.'*10


#开启20个线程负责校验,将抓取到的代理分成20份,每个线程校验一份
for i in range(20):
t = ProxyCheck(rawProxyList[((len(rawProxyList)+19)/20) * i:((len(rawProxyList)+19)/20) * (i+1)])
checkThreads.append(t)


for i in range(len(checkThreads)):
checkThreads[i].start()


for i in range(len(checkThreads)):
checkThreads[i].join()


print '.'*10+"总共有%s个代理通过校验" %len(checkedProxyList) +'.'*10


#开启20个线程随机取一个代理下载图片
for i in range(20):
t = getPic(imgurl_list[((len(imgurl_list)+19)/20) * i:((len(imgurl_list)+19)/20) * (i+1)])
getPicThreads.append(t)


for i in range(len(getPicThreads)):
getPicThreads[i].start()


for i in range(len(getPicThreads)):
getPicThreads[i].join()


print '.'*10+"总共有%s个图片下载" %len(imgurl_list) +'.'*10


#代理排序持久化
f= open("proxy_list.txt",'w+')
for proxy in sorted(checkedProxyList,cmp=lambda x,y:cmp(x[3],y[3])):
#print "checked proxy is: %s:%s\t%s\t%s" %(proxy[0],proxy[1],proxy[2],proxy[3])
f.write("%s:%s\t%s\t%s\n"%(proxy[0],proxy[1],proxy[2],proxy[3]))
f.close()


测试结果:
# ls
proxy_getpic.py
# python proxy_getpic.py
代理服务器目标网站: http://www.88181.com/proxy1.html
代理服务器目标网站: http://www.88181.com/proxy2.html
代理服务器目标网站: http://www.88181.com/proxy3.html
代理服务器目标网站: http://www.88181.com/proxy4.html
代理服务器目标网站: http://www.88181.com/proxy5.html
代理服务器目标网站: http://www.88181.com/proxy6.html
代理服务器目标网站: http://www.88181.com/proxy7.html
代理服务器目标网站: http://www.88181.com/proxy8.html
..........总共抓取了800个代理..........
..........总共有458个代理通过校验..........
..........总共有154个图片下载..........
# cat proxy_list.txt | more
173.213.113.111:3128 United States 0.432188987732
173.213.113.111:8089 United States 0.441318035126
173.213.113.111:7808 United States 0.444597005844
110.4.24.170:80 香港 香港移动通讯有限公司 0.489440202713
211.142.236.135:8080 湖南省株洲市 移动 0.490673780441
211.142.236.135:8081 湖南省株洲市 移动 0.518096923828
211.142.236.135:8000 湖南省株洲市 移动 0.51860499382
211.142.236.135:8082 湖南省株洲市 移动 0.520448207855
# ls
1001117689.jpg 3097883176.jpg 5234319709.jpg 7012274766.jpg 8504924248.jpg
1076458640.jpg 3144369522.jpg 5387877704.jpg 7106183143.jpg 867723868.jpg
1

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python爬虫多线程抓取代理服务器 下一篇Android过滤具体应用日志的脚本

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·请问微信4.0版本xwec (2025-12-24 22:48:42)
·电脑NVIDIA的文件夹 (2025-12-24 22:48:40)
·如何看待微信新版本 (2025-12-24 22:48:37)
·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)