首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python3 多进程multiprocessing下载图片「Python3 爬虫实战

最近发现 老用Mac 自带的壁纸不爽,就用谷歌去找个可以免费下载壁纸的网站,手动下载图片比较慢,第一网站是国外的

第二,家里的网速差(不要装移动的)

绝对高清大图

直接上代码:

导入用到的库

获取网站源码的函数

返回列表页面的对应图片内容页的网址

返回相对应图片的url

图片下载函数

main函数

运行程序 计时

想要源码的同学 私密小编 回复 025

# -*- coding: utf-8 -*-

"""

@Time: 2018/1/15

@Author: songhao

@微信公众号: zeropython

@File: spider.py

"""

# 导入工程中用到的库文件

importre, os

importrequests,time

fromhashlibimportmd5

frommultiprocessingimportPool

defget_html(url):

"""

:param url: url

:return: html源码

"""

r=requests.get(url)

ifr.status_code==200:

returnr.text

return None

defget_list_href(html):

"""

:param html: html源码

:return: 返回列表页面的对应图片内容页的网址

"""

req='

'

hrefs=re.findall(req, html, re.S)

# print(hrefs)

ifhrefs:

returnhrefs

return None

defget_image_url(ht):

"""

:param ht: image_url 内页源码

:return: 返回相对应的url

"""

req='

\s*

img_href=re.search(req, ht, re.S)

ifimg_href:

returnimg_href.group(1)

return None

defsave_image(img_url):

'''

format 字符串格式化

os.getcwd() 获取当前的目录

md5(content).hexdigest() 生成md5

os.path.exists检测文件是否存在

'''

ir=requests.get(img_url)

ifir.status_code==200:

content=ir.content

file_path='/.'.format(os.getcwd(), md5(content).hexdigest(),'jpg')

print(file_path)

if notos.path.exists(file_path):

withopen(file_path,'wb')asf:

f.write(content)

#二进制写入

else:

print("已存在")

print("下载完成", img_url)

defmain():

first_url="https://hdwallsource.com/?page=%d"

# 构造url

get_all_urls= [first_url%xforxinrange(1,5)]

all_imges= []

foriinget_all_urls:

ht=get_html(i)

ifht:

list_hrefs=get_list_href(ht)

forlist_hrefinlist_hrefs:

list_href_ht=get_html(list_href)

imgurl=get_image_url(list_href_ht)

print("put img url to all_imges", imgurl)

all_imges.append(imgurl)

# 创建 10个进程

pool=Pool(processes=10)

forimgurlinall_imges:

print("开始下载", imgurl)

pool.apply_async(save_image,args=(imgurl,))

# save_image(imgurl)

pool.close()

pool.join()

if__name__=='__main__':

start=time.time()

main()

print('[info]耗时:%s'%(time.time()-start))

明天更新多线程下载图片,一起加油学习

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180201G0A6YO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券