电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python自動下載圖片的方法示例

瀏覽:37日期:2022-08-01 10:19:18

近日閑來無事,總有一種無形的力量縈繞在朕身邊,讓朕精神渙散,昏昏欲睡。

python自動下載圖片的方法示例

可是,像朕這么有職業操守的社畜怎么能在上班期間睡瞌睡呢,我不禁陷入了沉思。。。。

python自動下載圖片的方法示例

突然旁邊的IOS同事問:‘嘿,兄弟,我發現一個網站的圖片很有意思啊,能不能幫我保存下來提升我的開發靈感?’作為一個堅強的社畜怎么能說自己不行呢,當時朕就不假思索的答應:‘oh, It’s simple. Wait for me a few minute.’

python自動下載圖片的方法示例

點開同事給的圖片網站,

網站大概長這樣:

python自動下載圖片的方法示例

在朕翻看了幾十頁之后,朕突然覺得有點上頭。心中一想’不對啊,朕不是來學習的嗎?可是看美女圖片這個事情怎么才可以和學習關聯起來呢‘

python自動下載圖片的方法示例

冥思苦想一番之后,突然腦中靈光一閃,’要不用python寫個爬蟲吧,將此網站的圖片一網打盡‘。

python自動下載圖片的方法示例

說干就干,身體力行,要問爬蟲哪家強,‘人生苦短,我用python’。

首先找到我的電腦里面半年前下載的python安裝包,無情的點擊了安裝,環境裝好之后,略一分析網頁結構。先擼一個簡易版爬蟲

#抓取愛小姐姐網圖片保存到本地import requestsfrom lxml import etree as etimport os#請求頭headers = { #用戶代理 ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’}#待抓取網頁基地址base_url = ’’#保存圖片基本路徑base_dir = ’D:/python/code/aixjj/’#保存圖片def savePic(pic_url): #如果目錄不存在,則新建 if not os.path.exists(base_dir): os.makedirs(base_dir) arr = pic_url.split(’/’) file_name = base_dir+arr[-2]+arr[-1] print(file_name) #獲取圖片內容 response = requests.get(pic_url, headers = headers) #寫入圖片 with open(file_name,’wb’) as fp: for data in response.iter_content(128): fp.write(data)#觀察此網站總共只有62頁,所以循環62次for k in range(1,63): #請求頁面地址 url = base_url+str(k) response = requests.get(url = url, headers = headers) #請求狀態碼 code = response.status_code if code == 200: html = et.HTML(response.text) #獲取頁面所有圖片地址 r = html.xpath(’//li/a/img/@src’) #獲取下一頁url #t = html.xpath(’//div[@class='page']/a[@class='ch']/@href’)[-1] for pic_url in r: a = ’http:’+pic_url savePic(a) print(’第%d頁圖片下載完成’ % (k))print(’The End!’)

嘗試運行爬蟲,嘿,沒想到行了:

python自動下載圖片的方法示例

python自動下載圖片的方法示例

過了一會兒,旁邊的哥們兒又來:‘嘿 bro 你這個可以是可以,就是速度太慢了啊,我的靈感會被長時間的等待磨滅,你給改進改進?’

python自動下載圖片的方法示例

怎么提升爬蟲的效率呢?略一思索,公司的電腦可是偉大的四核CPU啊,要不擼個多進程版本試試。然后就產生了下面這個多進程版本

#多進程版——抓取愛小姐姐網圖片保存到本地import requestsfrom lxml import etree as etimport osimport timefrom multiprocessing import Pool#請求頭headers = { #用戶代理 ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’}#待抓取網頁基地址base_url = ’’#保存圖片基本路徑base_dir = ’D:/python/code/aixjj1/’#保存圖片def savePic(pic_url): #如果目錄不存在,則新建 if not os.path.exists(base_dir): os.makedirs(base_dir) arr = pic_url.split(’/’) file_name = base_dir+arr[-2]+arr[-1] print(file_name) #獲取圖片內容 response = requests.get(pic_url, headers = headers) #寫入圖片 with open(file_name,’wb’) as fp: for data in response.iter_content(128): fp.write(data)def geturl(url): #請求頁面地址 #url = base_url+str(k) response = requests.get(url = url, headers = headers) #請求狀態碼 code = response.status_code if code == 200: html = et.HTML(response.text) #獲取頁面所有圖片地址 r = html.xpath(’//li/a/img/@src’) #獲取下一頁url #t = html.xpath(’//div[@class='page']/a[@class='ch']/@href’)[-1] for pic_url in r: a = ’http:’+pic_url savePic(a)if __name__ == ’__main__’: #獲取要爬取的鏈接列表 url_list = [base_url+format(i) for i in range(1,100)] a1 = time.time() #利用進程池方式創建進程,默認創建進程數量=電腦核數 #自己定義進程數量方式 pool = Pool(4) pool = Pool() pool.map(geturl,url_list) pool.close() pool.join() b1 = time.time() print(’運行時間:’,b1-a1)

抱著試一試的心態,運行了多進程版本爬蟲,嘿沒想到又行了,在朕偉大的四核CPU的加持下,爬蟲速度提升了3~4倍。又過了一會兒,那哥們兒又偏過頭來:‘你這個快是快了不少,但是還不是最理想的狀態,能不能一眨眼就能爬取百八十個圖片,畢竟我的靈感來的快去的也快’

我:‘…’悄悄打開Google,搜索如何提升爬蟲效率,給出結論:

多進程:密集CPU任務,需要充分使用多核CPU資源(服務器,大量的并行計算)的時候,用多進程。多線程:密集I/O任務(網絡I/O,磁盤I/O,數據庫I/O)使用多線程合適。

呵,我這可不就是I/O密集任務嗎,趕緊寫一個多線程版爬蟲先。于是,又誕生了第三款:

import threading # 導入threading模塊from queue import Queue #導入queue模塊import time #導入time模塊import requestsimport osfrom lxml import etree as et#請求頭headers = { #用戶代理 ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’}#待抓取網頁基地址base_url = ’’#保存圖片基本路徑base_dir = ’D:/python/code/aixjj/’#保存圖片def savePic(pic_url): #如果目錄不存在,則新建 if not os.path.exists(base_dir): os.makedirs(base_dir) arr = pic_url.split(’/’) file_name = base_dir+arr[-2]+arr[-1] print(file_name) #獲取圖片內容 response = requests.get(pic_url, headers = headers) #寫入圖片 with open(file_name,’wb’) as fp: for data in response.iter_content(128): fp.write(data)# 爬取文章詳情頁def get_detail_html(detail_url_list, id): while True: url = detail_url_list.get() #Queue隊列的get方法用于從隊列中提取元素 response = requests.get(url = url, headers = headers) #請求狀態碼 code = response.status_code if code == 200: html = et.HTML(response.text) #獲取頁面所有圖片地址 r = html.xpath(’//li/a/img/@src’) #獲取下一頁url #t = html.xpath(’//div[@class='page']/a[@class='ch']/@href’)[-1] for pic_url in r:a = ’http:’+pic_urlsavePic(a)# 爬取文章列表頁def get_detail_url(queue): for i in range(1,100): #time.sleep(1) # 延時1s,模擬比爬取文章詳情要快 #Queue隊列的put方法用于向Queue隊列中放置元素,由于Queue是先進先出隊列,所以先被Put的URL也就會被先get出來。 page_url = base_url+format(i) queue.put(page_url) print('put page url {id} end'.format(id = page_url))#打印出得到了哪些文章的url#主函數if __name__ == '__main__': detail_url_queue = Queue(maxsize=1000) #用Queue構造一個大小為1000的線程安全的先進先出隊列 #A線程負責抓取列表url thread = threading.Thread(target=get_detail_url, args=(detail_url_queue,)) html_thread= [] #另外創建三個線程負責抓取圖片 for i in range(20): thread2 = threading.Thread(target=get_detail_html, args=(detail_url_queue,i)) html_thread.append(thread2)#B C D 線程抓取文章詳情 start_time = time.time() # 啟動四個線程 thread.start() for i in range(20): html_thread[i].start() # 等待所有線程結束,thread.join()函數代表子線程完成之前,其父進程一直處于阻塞狀態。 thread.join() for i in range(20): html_thread[i].join() print('last time: {} s'.format(time.time()-start_time))#等ABCD四個線程都結束后,在主進程中計算總爬取時間。

粗略測試一下,得出結論: ‘Oh my god,這也太快了吧’。將多線程版本爬蟲扔到同事QQ頭像的臉上,并附文:‘拿去,速滾’

到此這篇關于python自動下載圖片的方法示例的文章就介紹到這了,更多相關python 自動下載圖片內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 首页-浙江橙树网络技术有限公司| 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 100国际学校招生 - 专业国际学校择校升学规划 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 伸缩节_伸缩器_传力接头_伸缩接头_巩义市联通管道厂 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 好笔杆子网 - 公文写作学习交流分享平台 | 找果网 | 苹果手机找回方法,苹果iPhone手机丢了找回,认准找果网! | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 |