街拍美圖的爬取主要還是在崔老師和其他的博客上的基礎上修改的,這篇文章里,我學習了爬取了B站的視頻封面,由於能力有限,代碼只能一次爬取一張。
首先進去B站首頁
然后偶選擇一個你覺得好看的視頻,點進去,還是觀察Network這一欄的信息
終於,我們找到了一欄信息
在這一欄我們可以看到data中包含了視頻的很多信息,我們直接把pic對應的url在網上搜索,得到了封面,
所以我們現在要做的就是用python從URL=‘https://api.bilibili.com/x/web-interface/view?aid=66698107&cid=115671196’中請求得到結果然后將其中的pic提取出來,下面直接上代碼
1 import json 2 import os 3 import re 4 import requests 5 from urllib import request 6 av = input('請輸入要查詢的AV號:') 7 url = 'https://api.bilibili.com/x/web-interface/view?aid=%s'% (av,) 8 9 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36', 10 'Referer': 'https://www.bilibili.com/v/douga?spm_id_from=333.334.b_62696c695f646f756761.2', 11 #'Accept': 'text / html, application / xhtml + xml, application / xml;q = 0.9, image / webp, image / apng, * / *;q = 0.8, application / signed - exchange;v = b3' 12 #這部分Headers一直報錯,查了博客發現不寫也可以直接爬 13 #'Accept-Encoding':'gzip, deflate, br', 14 #'Accept - Language':'zh-CN,zh;q=0.9', 15 #'Cache - Control':'max - age =', 16 #'Connection':'keep - alive' 17 } 18 response = requests.get(url,headers=headers) 19 content = json.loads(response.text) 20 # 獲取到的是str字符串 需要解析成json數據 21 statue_code = content.get('code') 22 if statue_code == 0: 23 print(content.get('data').get('pic')) 24 print(content.get('data').get('title')) 25 img=content.get('data').get('pic') 26 name=re.sub("[A-Za-z0-9\!\%\[\]\,\。/]", "",content.get('data').get('title')) #這部分用了正則,因為發現B站的有些視頻名稱會有些標點符號,會導致不能命名文件
#所以用正則只提取字符串中中文字符作為文件名
27 request.urlretrieve(img,name+'.jpg') #保存為title 28 else: 29 print('該AV號不存在')
代碼中的statue_code在data數據中可以看到,經過分析知道了其用來表示請求數據的狀態,在statue_code == 0的時候,才會有數據
在文件名這塊由於B站的有些視頻名稱會有些標點符號,會導致不能命名文件,所以加了正則,去掉除中英文以外的其他字符。
最后爬取的結果:
在文件夾中:
歡迎大家來一起探討學習