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


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

全文介紹:

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

涉及內容:

  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:
問題可以評論區提出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM