1. 程式人生 > >Python菜鳥教程(一)-爬b站資料

Python菜鳥教程(一)-爬b站資料

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的資料: