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

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

全文介紹:

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

涉及內容:

  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是這樣的:python

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

import urllib.parse

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

1.3 數據源:

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

瀑布流舉例說明:你去一個飯店,直接開口要十碗燴麪,這個時候老闆開始下面給你吃😏。而後你發現當你吃完第一碗麪,你就吃不下了。這個時候,剩下的面就算白作了。因此,下次你在去飯店,仍是直接開口要十碗麪,這時,老闆聰明瞭,下一碗麪,你吃一碗,你還須要,就在去下面。這樣就不會浪費。瀏覽器

針對這種數據加載,須要抓包
服務器

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

效果:



完整代碼:

因此,以此爲動力,又實現了翻頁,下面是簡單的所有代碼(代碼爲了零基礎小白看懂,大神勿噴)jsonp

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:
問題能夠評論區提出
網站

相關文章
相關標籤/搜索