零基礎爬取堆糖網圖片(一)

零基礎爬取堆糖網圖片(一)

全文介紹:

首先堆糖網是一個美圖壁紙興趣社區,有大量的美女圖片
今天我們實現搜索關鍵字爬取堆糖網上相關的美圖。
當然我們還可以實現多執行緒爬蟲,加快爬蟲爬取速度

涉及內容:

  1. 爬蟲基本流程
  2. requests庫基本使用
  3. urllib.parse模組
  4. json包
  5. jsonpath庫

圖例說明:

  1. 請求與響應
sequenceDiagram 瀏覽器->>伺服器: 請求 伺服器–>>瀏覽器: 響應
  1. 爬蟲基本流程
graph TD A[目標網站] –>|分析網站| B(url) B –> C[模擬瀏覽器請求資源] C –>D[解析網頁] D–>E[保存數據]

正文:

1. 分析網站

1.1 目標網址:https://www.duitang.com/
1.2 關鍵字:

值得注意的是url當中是不能有漢字的,所以真正的url是這樣的:

https://www.duitang.com/search/?kw=美女&type=feed
思路:

import urllib.parse    label = '美女'  label = urllib.parse.quote(label)  # 輸出:%E7%BE%8E%E5%A5%B3  
1.3 數據源:

首先,這個網站的數據是瀑布流式的載入方式。

瀑布流舉例說明:你去一個飯店,直接開口要十碗燴面,這個時候老闆開始下面給你吃?。然後你發現當你吃完第一碗面,你就吃不下了。這個時候,剩下的面就算白做了。所以,下次你在去飯店,還是直接開口要十碗面,這時,老闆聰明了,下一碗面,你吃一碗,你還需要,就在去下面。這樣就不會浪費。

針對這種數據載入,需要抓包

2. 導庫

import urllib.parse  import json  import requests  import jsonpath  

3. 模擬瀏覽器請求資源

we_data = requests.get(url).text  

4. 解析網頁

因為是json文件,所以直接用jsonpath工具提取數據

# 類型轉換  html = json.loads(we_data)  photo = jsonpath.jsonpath(html,"$..path")   print(photo)  

得到圖片的鏈接

5. 保存數據

num = 0  for i in photo:         a = requests.get(i)         with open(r'tupian{}.jpg'.format(num),'wb') as f:           #  content 二進位流          f.write(a.content)          num += 1  

效果:



完整程式碼:

所以,以此為動力,又實現了翻頁,下面是簡單的全部程式碼(程式碼為了零基礎小白看懂,大神勿噴)

import urllib.parse  import json  import requests  import jsonpath  url =  'https://www.duitang.com/napi/blog/list/by_search/?kw={}&start={}'  label = '美女'  # 關鍵字  label = urllib.parse.quote(label)  num = 0  # 翻頁  24的間隔  for index in range(0,2400,24):         u = url.format(label,index)         we_data = requests.get(u).text         html = json.loads(we_data)         photo = jsonpath.jsonpath(html,"$..path")      # 遍歷每頁的圖片鏈接      for i in photo:                 a = requests.get(i)          # wb 二進位寫入          with open(r'tupian{}.jpg'.format(num),'wb') as f:               # content 二進位流              f.write(a.content)             num +=1  

PS:
問題可以評論區提出