這是日常學python的第14篇原創文章
我前幾篇文章都是說一些python爬蟲庫的用法,還沒有說怎樣利用好這些知識玩一些好玩的東西。那我今天帶大家玩好玩又刺激的,嘻嘻!對了,requests庫和正規表示式很重要的,一定要學會!一定要學會!!一定要學會!!!我現在的爬蟲基本都是用這兩樣東西來爬的。所以學不學你看著辦吧。
來到今天的重點,我今天發現一個網站很好爬的,非常適合新手,我沒有設定請求頭什麼的爬了很多遍很沒有封我ip和給我返回403之類的,所以他對我們第一次玩爬蟲的人來說很友好。這個網站就是今日頭條。最重要的是這裡面有很多美女圖片,我們可以把它們爬下來!!!是不是想想都要流鼻血啊?
文章首發於公眾號「日常學python」
我們今天要爬的就是他的圖集,先看看網站。搜尋美女,然後點選圖集,可以看到下面這些內容
我們要做的就是把上面的圖片給爬下來。
那開始分析網站。按下f12,然後點選network,重新整理下你可以看到這些
進行尋找哪個請求返回這些圖片的,在網頁上可以看到圖片會隨著你下拉網頁而進行顯示更多的圖片,這是動態載入的,所以可以輕鬆知道這個可以在xhr檔案中找到,果然,你看
不斷往下拉,不斷地傳送請求,點選這個請求看看是返回什麼資料
可以看到這是個json,裡面有圖片的url,這個就是我們要找的東西,那我們可以用json庫來解析,還有這個網站是get請求,這樣就可以用requests庫來傳送然後解析下就可以了,非常簡單。
那麼分析就到這裡,直接上程式碼
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庫和正則來爬內容的文章,讓你們感受下正則的強大!
最後給你們看下結果
不說那麼多了,我要去買營養快線了。
上述文章如有錯誤歡迎在留言區指出,如果這篇文章對你有用,點個贊,轉個發如何?
日常學python
程式碼不止bug,還有美和樂趣