python簡單粗暴爬取微博評論區熱評配圖
阿新 • • 發佈:2018-12-16
-
本人爬蟲萌新,程式碼是網上搜了很多示例(很多看不懂,有些也跑不了了),摸摸索索了兩天才扒拉下來的,文中程式碼也非常簡單
甚至沒有設定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嗎,我在網上看了很多方法但是還是找不到……