1. 程式人生 > >python簡單粗暴爬取微博評論區熱評配圖

python簡單粗暴爬取微博評論區熱評配圖

  • 本人爬蟲萌新,程式碼是網上搜了很多示例(很多看不懂,有些也跑不了了),摸摸索索了兩天才扒拉下來的,文中程式碼也非常簡單甚至沒有設定headers ,如有問題請指正,非常感謝!

  • 瀏覽完整程式碼請直接拖動到底部。

  • 工具:Jupyter notebook, Chrome

  • 第一步:確定你要爬的是哪條微博的熱評,比如這個: 在這裡插入圖片描述 確定了之後我們就進入https://m.weibo.cn/,把這條找出來。

在這裡插入圖片描述 這個時候看它的url,把後面的數字串記住,那是每條微博獨有的標識,之後就可以直接帶入程式碼了!

  • 第二步:把這個頁面的資訊扒拉下來
import requests
import json

url = "https://m.weibo.cn/api/comments/show?id=&page=1" #這個地址是個模板,id=後面貼上上剛才找到的數字串標識
#print(url)
content = requests.get(url)
content = content.text   #獲取頁面內容
content = json.loads(content)  #微博評論是用ajax載入的

content = str(content) #轉為string,因為待會兒用正則查詢圖片的時候需要它為string格式
print(content)   #打印出來看看是什麼

在這裡插入圖片描述

  • 第三步:篩選出圖片地址 玩過微博的朋友都知道,刷微博的時候預設顯示的是小圖,點開後顯示大圖,在上面的內容中也一樣。另外其中也有其他圖片資訊,那就是評論使用者的頭像,這些統統都要用正則篩選掉,只選取評論配圖中的大圖
#程式碼是接著上一步的
import re

pattern = re.compile(r'wx\d.sinaimg.cn\/large\/.+?\.jpg') #按照我們的要求編的正則
rst = pattern.findall(content)
print (len(rst))  #看看找到了幾條
print(rst)  #再看看有哪些

在這裡插入圖片描述 看樣子就是他們了~

  • 第四步:儲存到本地
#同樣是接上邊的程式碼
from urllib import request
import time

for i,pic in enumerate(rst):  
 
    pic_url = 'http://' + pic #加上協議
    #print(pic_url)     
    urllib.request.urlretrieve(pic_url,'C://Users/lkm/Desktop/weibo/{0}.jpg'.format(i))  #儲存在已有的資料夾目錄下   
    time.sleep(1)

來看看下載下來了些什麼 在這裡插入圖片描述

大概就是這樣子了,如果要爬一條微博的全評論的話,應該是要換一個url的,但是我沒找到目前能用來爬的,如果有大佬知道請告訴我一下!

  • 最後貼一下完整程式碼:
import requests
import re
import json
import time
from urllib import request

url = "https://m.weibo.cn/api/comments/show?id=4071519774381280&page=1"
#print(url)
content = requests.get(url)
content = content.text
content = json.loads(content)
content = str(content)
#print(content)
    
pattern = re.compile(r'wx\d.sinaimg.cn\/large\/.+?\.jpg')
rst = pattern.findall(content)
print (len(rst))
print(rst)
#time.sleep(0.5)
    
for i,pic in enumerate(rst):  

    #pic_url = re.sub(r'\\',"",pic)
    pic_url = 'http://' + pic
    print(pic_url)
           
    urllib.request.urlretrieve(pic_url,'C://Users/lkm/Desktop/weibo/{0}.jpg'.format(i))
        
    time.sleep(1)

題外話:會爬知乎的大佬能教我一下看headers裡面的authorization嗎,我在網上看了很多方法但是還是找不到……