日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python爬虫 搜索并下载图片

發(fā)布時(shí)間:2024/9/21 python 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫 搜索并下载图片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文是我學(xué)習(xí)Python爬蟲的筆記,一直想要再學(xué)一門語(yǔ)言來擴(kuò)展自己的知識(shí)面,看了看各種語(yǔ)言主要使用的方向,最后決心還是來搞一搞Python.Python給我的第一印象就是語(yǔ)法簡(jiǎn)潔,格式另類還有各種庫(kù)的支持,就喜歡這么有個(gè)性的語(yǔ)言~為了以后深入的學(xué)習(xí)爬蟲,事先肯定是先把語(yǔ)法學(xué)了一遍,下面是我實(shí)現(xiàn)的一個(gè)小爬蟲,可以通過百度圖庫(kù)利用關(guān)鍵字來搜索圖片并下載~

###工具準(zhǔn)備:

  • 不要多想,挑個(gè)IDE吧,我用的是PyCharm(免費(fèi)的~嗯,今年剛剛免費(fèi)的)
  • 打開PyCharm的設(shè)置(找找在哪,我都是直接commond+,的,如果你有commond鍵的話)在Project下選擇Project Interpreter然后點(diǎn)擊左下角的加號(hào),在輸入框中輸入requests,收索后安裝,其實(shí)還有很多其他的安裝方法,使用pip,在終端中敲入那些代碼,然后還有什么其他的東西,不過還是這樣比較偷懶(其實(shí)前面的坑我都爬過了)
  • Python為最新版,2.7應(yīng)該也沒問題,并未使用Scrapy爬蟲框架,也沒有使用lxml,僅僅使用re正則和requests網(wǎng)絡(luò)請(qǐng)求

re和requests用法

  • re正則

re就是正則,主要是用來解析數(shù)據(jù)的,當(dāng)我們拿到網(wǎng)頁(yè)的數(shù)據(jù)時(shí)需要從中提取處我們想要的數(shù)據(jù),正則匹配就時(shí)其中的一個(gè)方法,至于正則的寫法,這里就不在多講,想看的在這里正則表達(dá)式30分鐘入門教程,而re的常用使用手法可以在我的這篇文章里了解Python爬蟲-re(正則表達(dá)式)模塊常用方法,這里我們主要使用其re.findall("正則表達(dá)式","被匹配數(shù)據(jù)",匹配限制(例如:忽略大小寫))

  • requests網(wǎng)絡(luò)請(qǐng)求

requests的封裝異常的強(qiáng)大,幾乎可以做任何形式的網(wǎng)絡(luò)請(qǐng)求,這里我們只是使用了其最簡(jiǎn)單的get請(qǐng)求requests.get("url",timeout=5),詳細(xì)了解,可以看一下(requests快速入門)

具體的步驟

  • 首先是想清楚想要做什么,你想要獲取什么數(shù)據(jù)(沒有目標(biāo)哪來的動(dòng)力啊),這里我們是想要通過百度圖片來后去圖片鏈接及內(nèi)容,我想要搜索關(guān)鍵字,并可以指定搜索的數(shù)據(jù)量,選擇是否保存及保存的路徑~

  • 需求有了,就要去分析要爬去的網(wǎng)頁(yè)結(jié)構(gòu)了,看一下我們的數(shù)據(jù)都在哪,我們這次要扒去的圖片來自百度圖片

  • 首先進(jìn)入百度圖庫(kù),你所看見的頁(yè)面當(dāng)向下滑動(dòng)的時(shí)候可以不停的刷新,這是一個(gè)動(dòng)態(tài)的網(wǎng)頁(yè),而我們可以選擇更簡(jiǎn)單的方法,就是點(diǎn)擊網(wǎng)頁(yè)上方的傳統(tǒng)翻頁(yè)版本

  • 接下來就是我們熟悉的翻頁(yè)界面,你可以點(diǎn)擊第幾頁(yè)來獲取更多的圖片

  • 點(diǎn)擊鼠標(biāo)的右鍵可以查看網(wǎng)頁(yè)的源代碼,大概就是這個(gè)樣子的,我們get下來的數(shù)據(jù),就是這個(gè)啦,我們需要在這里面找到各個(gè)圖片的鏈接下一頁(yè)的鏈接,然而有點(diǎn)懵,這么多的數(shù)據(jù),我們想要的在哪里呢?

  • 不著急,我們可以通過瀏覽器的開發(fā)者工具來查看網(wǎng)頁(yè)的元素,我用的是Chrome,打開Developer Tools來查看網(wǎng)頁(yè)樣式,當(dāng)你的鼠標(biāo)從結(jié)構(gòu)表中劃過時(shí)會(huì)實(shí)時(shí)顯示此段代碼所對(duì)應(yīng)的位置區(qū)域,我們可以通過此方法,快速的找到圖片所對(duì)應(yīng)的位置:

    找到了一張圖片的路徑和下一頁(yè)的路徑,我們可以在源碼中搜索結(jié)果找到他們的位置,并分析如何書寫正則來獲取信息:

  • 所有的數(shù)據(jù)都分析完畢了,這個(gè)時(shí)候就要開始寫我們的爬蟲了,看了這么久,竟然一句代碼都沒有:

import requests #首先導(dǎo)入庫(kù) import re 復(fù)制代碼然后設(shè)置默認(rèn)配置 復(fù)制代碼 MaxSearchPage = 20 # 收索頁(yè)數(shù) CurrentPage = 0 # 當(dāng)前正在搜索的頁(yè)數(shù) DefaultPath = "/Users/caishilin/Desktop/pictures" # 默認(rèn)儲(chǔ)存位置 NeedSave = 0 # 是否需要儲(chǔ)存 復(fù)制代碼圖片鏈接正則和下一頁(yè)的鏈接正則 復(fù)制代碼 def imageFiler(content): # 通過正則獲取當(dāng)前頁(yè)面的圖片地址數(shù)組return re.findall('"objURL":"(.*?)"',content,re.S) def nextSource(content): # 通過正則獲取下一頁(yè)的網(wǎng)址next = re.findall('<div id="page">.*<a href="(.*?)" class="n">',content,re.S)[0]print("---------" + "http://image.baidu.com" + next) return next 復(fù)制代碼爬蟲主體 復(fù)制代碼 def spidler(source):content = requests.get(source).text # 通過鏈接獲取內(nèi)容imageArr = imageFiler(content) # 獲取圖片數(shù)組global CurrentPageprint("Current page:" + str(CurrentPage) + "**********************************")for imageUrl in imageArr:print(imageUrl)global NeedSaveif NeedSave: # 如果需要保存保存global DefaultPathtry: picture = requests.get(imageUrl,timeout=10) # 下載圖片并設(shè)置超時(shí)時(shí)間,如果圖片地址錯(cuò)誤就不繼續(xù)等待了except: print("Download image error! errorUrl:" + imageUrl) continue pictureSavePath = DefaultPath + imageUrl.replace('/','') # 創(chuàng)建圖片保存的路徑fp = open(pictureSavePath,'wb') # 以寫入二進(jìn)制的方式打開文件 fp.write(picture.content)fp.close()else: global MaxSearchPageif CurrentPage <= MaxSearchPage:if nextSource(content):CurrentPage += 1 spidler("http://image.baidu.com" + nextSource(content)) # 爬取完畢后通過下一頁(yè)地址繼續(xù)爬取 復(fù)制代碼爬蟲的開啟方法 復(fù)制代碼 def beginSearch(page=1,save=0,savePath="/users/caishilin/Desktop/pictures/"): # (page:爬取頁(yè)數(shù),save:是否儲(chǔ)存,savePath:默認(rèn)儲(chǔ)存路徑)global MaxSearchPage,NeedSave,DefaultPathMaxSearchPage = pageNeedSave = saveDefaultPath = savePathkey = input("Please input you want search StartSource = "http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=" + str(key) + "&ct=201326592&v=flip" # 分析鏈接可以得到,替換其`word`值后面的數(shù)據(jù)來收索關(guān)鍵詞spidler(StartSource) 復(fù)制代碼 調(diào)用開啟的方法就可以通過關(guān)鍵詞搜索圖片了 復(fù)制代碼 beginSearch(page=1,save=0) 復(fù)制代碼

小結(jié)

** 因?yàn)閷?duì)Python的理解還不是特別的深入,所以代碼比較繁瑣,相比較爬蟲框架Scrapy來說,直接使用reqests和re顯得并不是特別的酷,但是這是學(xué)習(xí)理解爬蟲最好的方式,接下來我會(huì)陸陸續(xù)續(xù)將我學(xué)習(xí)爬蟲框架Scrapy的過程寫下來,有錯(cuò)誤的地方請(qǐng)指正~**

總結(jié)

以上是生活随笔為你收集整理的Python爬虫 搜索并下载图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。