Python爬取網(wǎng)頁(yè)中的圖片(搜狗圖片)詳解
前言
最近幾天,研究了一下一直很好奇的爬蟲(chóng)算法。這里寫一下最近幾天的點(diǎn)點(diǎn)心得。下面進(jìn)入正文:
你可能需要的工作環(huán)境:
我們這里以sogou作為爬取的對(duì)象。
首先我們進(jìn)入搜狗圖片http://pic.sogou.com/,進(jìn)入壁紙分類(當(dāng)然只是個(gè)例子Q_Q),因?yàn)槿绻枰廊∧尘W(wǎng)站資料,那么就要初步的了解它…

進(jìn)去后就是這個(gè)啦,然后F12進(jìn)入開(kāi)發(fā)人員選項(xiàng),筆者用的是Chrome。
右鍵圖片>>檢查

發(fā)現(xiàn)我們需要的圖片src是在img標(biāo)簽下的,于是先試著用 Python 的 requests提取該組件,進(jìn)而獲取img的src然后使用 urllib.request.urlretrieve逐個(gè)下載圖片,從而達(dá)到批量獲取資料的目的,思路好了,下面應(yīng)該告訴程序要爬取的url為http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url來(lái)自進(jìn)入分類后的地址欄。明白了url地址我們來(lái)開(kāi)始愉快的代碼時(shí)間吧:
在寫這段爬蟲(chóng)程序的時(shí)候,最好要逐步調(diào)試,確保我們的每一步操作正確,這也是程序猿應(yīng)該有的好習(xí)慣。筆者不知道自己算不算個(gè)程序猿哈。線面我們來(lái)剖析該url指向的網(wǎng)頁(yè)。
import requests
import urllib
from bs4 import 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,這顯然不是我們想要的。也就是說(shuō)需要的圖片資料不在url 即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考慮可能該元素是動(dòng)態(tài)的,細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),當(dāng)在網(wǎng)頁(yè)內(nèi),向下滑動(dòng)鼠標(biāo)滾輪,圖片是動(dòng)態(tài)刷新出來(lái)的,也就是說(shuō),該網(wǎng)頁(yè)并不是一次加載出全部資源,而是動(dòng)態(tài)加載資源。這也避免了因?yàn)榫W(wǎng)頁(yè)過(guò)于臃腫,而影響加載速度。下面痛苦的探索開(kāi)始了,我們是要找到所有圖片的真正的url 筆者也是剛剛接觸,找這個(gè)不是太有經(jīng)驗(yàn)。最后找的位置F12>>Network>>XHR>>(點(diǎn)擊XHR下的文件)>>Preview。

發(fā)現(xiàn),有點(diǎn)接近我們需要的元素了,點(diǎn)開(kāi)all_items 發(fā)現(xiàn)下面是0 1 2 3...一個(gè)一個(gè)的貌似是圖片元素。試著打開(kāi)一個(gè)url。發(fā)現(xiàn)真的是圖片的地址。找到目標(biāo)之后。點(diǎ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,試著去掉一些不必要的部分,技巧就是,刪掉可能的部分之后,訪問(wèn)不受影響。經(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為開(kāi)始下標(biāo),len為長(zhǎng)度,也即圖片的數(shù)量。好了,開(kāi)始愉快的代碼時(shí)間吧:
開(kāi)發(fā)環(huán)境為Win7 Python 3.6,運(yùn)行的時(shí)候Python需要安裝requests,
Python3.6 安裝requests 應(yīng)該CMD敲入:
pip install requests
筆者在這里也是邊調(diào)試邊寫,這里把最終的代碼貼出來(lái):
import requests
import json
import urllib
def 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 = []
for j in jd:
imgs_url.append(j['bthumbUrl'])
m = 0
for img_url in imgs_url:
print('***** '+str(m)+'.jpg *****'+' Downloading...')
urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')
m = m + 1
print('Download complete!')
getSogouImag('壁紙',2000,'d:/download/壁紙/')
程序跑起來(lái)的時(shí)候,筆者還是有點(diǎn)小激動(dòng)的。來(lái),感受一下:
至此,關(guān)于該爬蟲(chóng)程序的編程過(guò)程敘述完畢。整體來(lái)看,找到需要爬取元素所在url,是爬蟲(chóng)諸多環(huán)節(jié)中的關(guān)鍵
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片
- Python爬蟲(chóng)爬取一個(gè)網(wǎng)頁(yè)上的圖片地址實(shí)例代碼
- Python3直接爬取圖片URL并保存示例
- Python使用爬蟲(chóng)爬取靜態(tài)網(wǎng)頁(yè)圖片的方法詳解
- python3 爬取圖片的實(shí)例代碼
- Python爬蟲(chóng)爬取網(wǎng)站圖片
- python實(shí)現(xiàn)爬取百度圖片的方法示例
- python爬蟲(chóng)爬取圖片的簡(jiǎn)單代碼
- Python 爬蟲(chóng)批量爬取網(wǎng)頁(yè)圖片保存到本地的實(shí)現(xiàn)代碼
- python爬蟲(chóng)實(shí)戰(zhàn)項(xiàng)目之爬取pixiv圖片
相關(guān)文章
Python OpenCV實(shí)現(xiàn)基本圖形繪制
這篇文章主要介紹了Python OpenCV實(shí)現(xiàn)基本圖形繪制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Python?中?Selenium?的?send_keys()?函數(shù)用法小結(jié)
send_keys() 是將數(shù)字、文本和符號(hào)等鍵盤輸入發(fā)送到應(yīng)用程序的文本框的過(guò)程, send_keys() 是 WebDriver 的一部分,每個(gè)鍵盤輸入都會(huì)發(fā)送到此元素,這篇文章主要介紹了Python?中?Selenium?的?send_keys()?函數(shù),需要的朋友可以參考下2023-11-11
利用rest framework搭建Django API過(guò)程解析
這篇文章主要介紹了利用rest framework搭建Django API過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Python實(shí)現(xiàn)批量將圖像png格式轉(zhuǎn)為npy格式
在進(jìn)行深度學(xué)習(xí)處理時(shí),有些的代碼處理的數(shù)據(jù)格式為npy,但是常常有的數(shù)據(jù)格式為png,因此本文就來(lái)介紹一下Python如何實(shí)現(xiàn)圖像批量png格式轉(zhuǎn)為npy格式,需要的可以參考下2023-12-12
Python腳本實(shí)現(xiàn)定時(shí)監(jiān)控端口
這篇文章主要為大家詳細(xì)介紹了如何使用Python腳本實(shí)現(xiàn)定時(shí)監(jiān)控端口功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
python初學(xué)者,用python實(shí)現(xiàn)基本的學(xué)生管理系統(tǒng)(python3)代碼實(shí)例
這篇文章主要介紹了用python實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

