赞
踩
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)
经过一夜的爬取,让我们看下爬取的数据
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的资料:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。