Python菜鳥教程(一)-爬b站資料
阿新 • • 發佈:2019-01-25
BeautifulSoup
安裝BeautifulSoup
pip install beautifulsoup4
安裝了python的同學應該都知道python的包管理工具pip,這裡就不贅述了。
切入點
爬網站主要還是找到一個url,當然有api是最好的,很容易就可以爬到自己想要的資料:
url:http://api.bilibili.com/archive_stat/stat?aid=xxx
# ps
b站這個請求太頻繁的拉資料的話,會被封ip的,我現在正在用手機開著熱點,一邊在拉資料,一邊在寫這篇教程
大概抓1w條左右會被檢測出來,然後封個5分鐘左右ip,很多大佬說,做爬蟲要多弄個代理,不會玩。
google了一下,b站用的大概是爬取間隔自適應。就是已經限制了你這個IP的抓取,就不要傻傻重複試,怎麼滴也得休息一會。網易雲音樂操作起來比較簡單,sleep一下就好了。其實sleep的間隔應該按情況累加,比如第一次sleep 10秒,發現還是被約束。那麼就sleep 20秒… 這個間隔的設定已經自適應的最終效果是經驗值。
貼程式碼
import json
from bs4 import BeautifulSoup
from urllib import request
def getScript(url):
head = {}
# 這邊是要拼個請求頭的
head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'
req = request.Request(url, headers = head)
response = request.urlopen(req)
html = response.read()
soup = BeautifulSoup(html, 'lxml' )
data = json.loads(soup.text)
if (data.get("code") ==40003):
return False;
else:
return data.get("data");
if __name__=="__main__":
for i in range(159007,754613):
url = 'http://api.bilibili.com/archive_stat/stat?aid='+str(i)
str1 = getScript(url)
if str1:
# IO操作
with open('D:/result.txt','a+',encoding='utf-8', errors='ignore') as f:
f.write(str(str1))
print(str1)
爬取的部分txt
一夜之後
經過一夜的爬取,讓我們看下爬取的資料
SELECT COUNT(1) FROM video
-- 216997
select aid av號,`view` 播放量,danmaku 彈幕,favorite 喜歡,coin 硬幣,`share` 分享 from video where `view`=(select max(`view`) from video);
-- 225094 8024979 471856 25306 15497 10924
抓取到的這個av號去bilibili看一下,居然是天降之物,居然不是fate!
讓我們看一下fate的連結:
https://bangumi.bilibili.com/anime/1650
– 哇,一聲就哭出來了,mmp
然後搜一下天降之物,有兩個連結:
http://www.bilibili.com/video/av225094/
https://bangumi.bilibili.com/anime/971/
推斷:
b站可能把高點選量的視訊都用,一下連結了:
https://bangumi.bilibili.com/anime/id號/
可能也想由http轉https,讓網站更安全。
好吧,那接下來我們的目標很明確了,就是抓https://bangumi.bilibili.com/anime/id號/
這個連結的資料了。
後記
python還是非常有意思的,尤其是從爬蟲這裡入門。
跟java比起來更加的輕巧,剛開始學,有些不會的東西也不需要太深究,跟著大佬們敲一敲。
備註一些學習python的資料: