老司機帶你用python來爬取妹子圖

這是平常學python的第14篇原創文章
python


我前幾篇文章都是說一些python爬蟲庫的用法,尚未說怎樣利用好這些知識玩一些好玩的東西。那我今天帶你們玩好玩又刺激的,嘻嘻!對了,requests庫和正則表達式很重要的,必定要學會!必定要學會!!必定要學會!!!我如今的爬蟲基本都是用這兩樣東西來爬的。因此學不學你看着辦吧。正則表達式


來到今天的重點,我今天發現一個網站很好爬的,很是適合新手,我沒有設置請求頭什麼的爬了不少遍很沒有封我ip和給我返回403之類的,因此他對咱們第一次玩爬蟲的人來講很友好。這個網站就是今日頭條。最重要的是這裏面有不少美女圖片,咱們能夠把它們爬下來!!!是否是想一想都要流鼻血啊?json


文章首發於公衆號「平常學python」微信


咱們今天要爬的就是他的圖集,先看看網站。搜索美女,而後點擊圖集,能夠看到下面這些內容app


咱們要作的就是把上面的圖片給爬下來。python爬蟲


那開始分析網站。按下f12,而後點擊network,刷新下你能夠看到這些網站


進行尋找哪一個請求返回這些圖片的,在網頁上能夠看到圖片會隨着你下拉網頁而進行顯示更多的圖片,這是動態加載的,因此能夠輕鬆知道這個能夠在xhr文件中找到,果真,你看url


不斷往下拉,不斷地發送請求,點擊這個請求看看是返回什麼數據spa


能夠看到這是個json,裏面有圖片的url,這個就是咱們要找的東西,那咱們能夠用json庫來解析,還有這個網站是get請求,這樣就能夠用requests庫來發送而後解析下就能夠了,很是簡單。.net


那麼分析就到這裏,直接上代碼

import requests, os
path_a = os.path.abspath('.')
kw = ''
while True:
   kw = input('請輸入你要獲取的圖片(若想結束請輸入1)')
   if kw == '1':
       print('已退出,你下載的圖片已保存在'+path_a+',請查看!')
       break
   for x in range(0, 1000, 20):
       url = 'https://www.toutiao.com/search_content/?offset='+str(x)+'&format=json&keyword=%s&autoload=true&count=20&cur_tab=3&from=gallery' % kw
       response = requests.get(url)
       data = response.json()['data']
       if not data:
           print('下載'+kw+'圖片完畢,請換個關鍵詞繼續')
           break
       n = 1  # 記錄文章數
       for atlas in data:
           # 建立目錄
           title = atlas['title']
           print(atlas)
           try:
               if title not in os.listdir('.'):  # 防止文件名已經存在
                   os.mkdir(title)
           except OSError as e:
               print('文件名出錯,建立目錄失敗,從新建立一個隨機名字')
               title = kw + '文件名出錯'+str(x)
               if title not in os.listdir('.'):
                   os.mkdir(title)
           k = 1  # 記錄下載的圖片數
           path = os.path.join(path_a, title)
           # 轉進圖片目錄
           os.chdir(path)
           for image in atlas['image_list']:  # 這個連接獲取的圖片是小張的,看着不夠爽,因此下面替換成大的圖片
               image_url = image['url'].replace('list', 'large')  # 改個連接獲取大的圖片
               atlas = requests.get('http:'+image_url).content
               with open(str(k)+'.jpg', 'wb') as f:  # 把圖片寫入文件內
                   f.write(atlas)
               print('下載完第%d個文章的%d幅圖完成' % (x+n, k))
               k += 1
           n += 1
           # 轉出圖片目錄
           os.chdir(path_a)


這個只用了requests庫基本就能完成了,os庫是用來操做文件目錄的,這裏就不詳細說了。能夠看到,代碼量很是少,除開註釋就大概四十行吧,是否是比其餘語言簡潔多了?是否是requests庫很好用?這裏能夠充分體現了人生苦短,我用python的真理。


並且,他還可換關鍵字繼續搜,你想搜什麼照片均可以。


下篇文章寫個requests庫和正則來爬內容的文章,讓大家感覺下正則的強大!


最後給大家看下結果


不說那麼多了,我要去買養分快線了。


上述文章若有錯誤歡迎在留言區指出,若是這篇文章對你有用,點個贊,轉個發如何?


MORE
延伸閱讀

◐◑爬蟲必學知識之正則表達式上篇

◐◑ python爬蟲經常使用庫之requests詳解

◐◑ 爬蟲必學知識之正則表達式下篇





平常學python

代碼不止bug,還有美和樂趣

本文分享自微信公衆號 - 平常學python(daily_learn)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息