爬取哔哩哔哩网站数据

完成爬虫之前,我们这里用到的是PrettyTable(美化表单)呈现爬取数据;
PrettyTable模块的安装与简单应用如下:
进入pypi.python.org查找并下载PrettyTable将其放在Python文件夹下的Scripts文件夹下
在这里插入图片描述
进入命令提示符工具,转到Scripts文件夹下,通过命令pip install prettytable-0.7.2.tar.bz2安装该模块
导入该模块:
from prettytable import PrettyTable

编写爬虫首先是分析想要爬去的页面url格式或者html页面中的标签的链接,浏览器会向服务器发送很多请求,服务器也会对浏览器的请求做出相应相应。在B站番剧网页中按F12打开监控面板,然后选择network页面,选择Other,该页面中可以分析浏览器与服务器之间的交互情况。经过一番观察之后,我们可以发现我们要搜集的视频信息,可以通过 http://api.bilibili.com/x/web-interface/archive/stat?aid=…拼接上一个具体数值(视频编号)来访问,以此查看可爬取的数据内容。

完整代码如下:

import json
from bs4 import BeautifulSoup
from urllib import request
from prettytable import PrettyTable
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__":
        row=PrettyTable(['视频编号','播放量','弹幕','收藏','硬币'])
        for i in range(40,60):
                url = 'http://api.bilibili.com/archive_stat/stat?aid='+str(i)
                data = getScript(url)
                if data==False:
                        continue
                favorite=data['favorite']
                danmaku=data['danmaku']
                coin=data['coin']
                view=data['view']
                favorite=str(favorite)
                
                coin=str(coin)
                view=str(view)
                av_num="av"+str(i)
                row.add_row([av_num,view,danmaku,favorite,coin])
        print(row)
        #if str1:
             # IO操作
           # with open('D:/result.txt','a+',encoding='utf-8', errors='ignore') as f:
             #     f.write(str(str1))

爬虫的主体部分。首先是用prettytable,插入表头信息,然后开始构造url地址,用requests方法获取url内容,对于返回的json串进行解析,然后将每个数值对应的插入到表格中,我们的查询范围range()40-60之间,则会爬取40-60之间的信息,具体代码如下编写主函数。(这里的视频编号范围可自己设置)

经过一段时间的爬取,结果如下:

爬取哔哩哔哩网站数据_第1张图片

你可能感兴趣的:(爬取哔哩哔哩网站数据)