利用Python爬取網(wǎng)頁圖片

你可能需要的工作環(huán)境:

Python 3.6官網(wǎng)下載

  我們這里以sogou作為爬取的對象。

首先我們進入搜狗圖片http://pic.sogou.com/,進入壁紙分類(當然只是個例子Q_Q),因為如果需要爬取某網(wǎng)站資料,那么就要初步的了解它…

進去后就是這個啦,然后F12進入開發(fā)人員選項,筆者用的是Chrome。


右鍵圖片>>檢查 ? ?

發(fā)現(xiàn)我們需要的圖片src是在img標簽下的,于是先試著用 Python 的 requests提取該組件,進而獲取img的src然后使用?urllib.request.urlretrieve逐個下載圖片,從而達到批量獲取資料的目的,思路好了,下面應(yīng)該告訴程序要爬取的url為http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url來自進入分類后的地址欄。明白了url地址我們來開始愉快的代碼時間吧:

在寫這段爬蟲程序的時候,最好要逐步調(diào)試,確保我們的每一步操作正確,這也是程序猿應(yīng)該有的好習慣。筆者不知道自己算不算個程序猿哈。線面我們來剖析該url指向的網(wǎng)頁。

import requestsimport urllibfrombs4import BeautifulSoup

res = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')

soup = BeautifulSoup(res.text,'html.parser')print(soup.select('img'))

output:

?發(fā)現(xiàn)輸出內(nèi)容并不包含我們要的圖片元素,而是只剖析到logo的img,這顯然不是我們想要的。也就是說需要的圖片資料不在url ?即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考慮可能該元素是動態(tài)的,細心的同學可能會發(fā)現(xiàn),當在網(wǎng)頁內(nèi),向下滑動鼠標滾輪,圖片是動態(tài)刷新出來的,也就是說,該網(wǎng)頁并不是一次加載出全部資源,而是動態(tài)加載資源。這也避免了因為網(wǎng)頁過于臃腫,而影響加載速度。下面痛苦的探索開始了,我們是要找到所有圖片的真正的url 筆者也是剛剛接觸,找這個不是太有經(jīng)驗。最后找的位置F12>>Network>>XHR>>(點擊XHR下的文件)>>Preview。

發(fā)現(xiàn),有點接近我們需要的元素了,點開all_items 發(fā)現(xiàn)下面是0 1 2 3...一個一個的貌似是圖片元素。試著打開一個url。發(fā)現(xiàn)真的是圖片的地址。找到目標之后。點擊XHR下的Headers

得到第二行

Request URL:

http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864,試著去掉一些不必要的部分,技巧就是,刪掉可能的部分之后,訪問不受影響。經(jīng)筆者篩選。最后得到的url:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15 ?字面意思,知道category后面可能為分類。start為開始下標,len為長度,也即圖片的數(shù)量。好了,開始愉快的代碼時間吧:

開發(fā)環(huán)境為Win7 ?Python 3.6,運行的時候Python需要安裝requests,

Python3.6 安裝requests 應(yīng)該CMD敲入:

pip install requests

筆者在這里也是邊調(diào)試邊寫,這里把最終的代碼貼出來:

import requestsimport jsonimport urllibdef getSogouImag(category,length,path):

? ? n = length

? ? cate = category

? ? imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n))

? ? jd = json.loads(imgs.text)

? ? jd = jd['all_items']

? ? imgs_url = []

? ? forjin jd:

? ? ? ? imgs_url.append(j['bthumbUrl'])

? ? m = 0

? ? forimg_urlin imgs_url:

? ? ? ? ? ? print('***** '+str(m)+'.jpg *****'+'? Downloading...')

? ? ? ? ? ? urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')

? ? ? ? ? ? m = m + 1print('Download complete!')

getSogouImag('壁紙',2000,'d:/download/壁紙/')

?程序跑起來的時候,筆者還是有點小激動的。來,感受一下:

至此,關(guān)于該爬蟲程序的編程過程敘述完畢。整體來看,找到需要爬取元素所在url,是爬蟲諸多環(huán)節(jié)中的關(guān)鍵

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容