国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python爬取網頁中的圖片(搜狗圖片)詳解

2019-11-25 16:17:45
字體:
來源:轉載
供稿:網友

前言

最近幾天,研究了一下一直很好奇的爬蟲算法。這里寫一下最近幾天的點點心得。下面進入正文:

你可能需要的工作環境:

  Python 3.6官網下載

       本地下載

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

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

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

右鍵圖片>>檢查   

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

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

import requestsimport urllibfrom bs4 import BeautifulSoupres = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')soup = BeautifulSoup(res.text,'html.parser')print(soup.select('img'))

output:

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

發現,有點接近我們需要的元素了,點開all_items 發現下面是0 1 2 3...一個一個的貌似是圖片元素。試著打開一個url。發現真的是圖片的地址。找到目標之后。點擊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,試著去掉一些不必要的部分,技巧就是,刪掉可能的部分之后,訪問不受影響。經筆者篩選。最后得到的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為長度,也即圖片的數量。好了,開始愉快的代碼時間吧:

開發環境為Win7  Python 3.6,運行的時候Python需要安裝requests,

Python3.6 安裝requests 應該CMD敲入:

pip install requests

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

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 = [] 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/壁紙/')

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

 

 

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵东县| 江源县| 三门县| 杨浦区| 三门县| 阿坝县| 丹东市| 南部县| 方山县| 广元市| 保亭| 巴彦淖尔市| 濮阳市| 司法| 汉源县| 南充市| 安平县| 宾阳县| 颍上县| 宣汉县| 上饶市| 太仆寺旗| 景泰县| 合江县| 叶城县| 广安市| 子洲县| 奈曼旗| 石家庄市| 东乡| 邢台县| 永靖县| 独山县| 上犹县| 鄂伦春自治旗| 昭觉县| 海伦市| 金华市| 舞阳县| 莱芜市| 莱芜市|