精华内容
下载资源
问答
  • b站爬虫
    千次阅读
    更多相关内容
  • 简单b站爬虫

    千次阅读 2018-12-18 11:00:10
    这是一篇关于b站爬虫。 爬了一点关于一些番剧的短评,做了一图两表。 找到你要爬到番剧(这里以刀剑为例) 1.找到这样一个界面,点击到短评。 2.点F12进入开发者模式,然后点network,all。 3.在搜索框输入...

    这是一篇关于b站的爬虫。
    爬了一点关于一些番剧的短评,做了一图两表。

    找到你要爬到番剧(这里以刀剑为例)

    找个喜欢的就行
    1.找到这样一个界面,点击到短评。
    2.点F12进入开发者模式,然后点network,all。
    3.在搜索框输入list。
    4.点击搜到的list?开头的链接,然后点Preview。这就是第一个短评列表
    5.在页面上继续下滑,就会出现第二,第三个。(之所以会这样是因为,b站的短评是动态加载的)
    在这里插入图片描述

    第一步找到所有的短评链接

    在这里插入图片描述
    点击Headers,拿到url,与response headers。
    这样就获得了第一条短评,那如何获得第二条呢?
    首先我们观察一下他的前三条URL链接
    https://bangumi.bilibili.com/review/web_api/short/list?media_id=130412&folded=0&page_size=20&sort=0

    https://bangumi.bilibili.com/review/web_api/short/list?media_id=130412&folded=0&page_size=20&sort=0&cursor=76802609461338

    https://bangumi.bilibili.com/review/web_api/short/list?media_id=130412&folded=0&page_size=20&sort=0&cursor=76798314491572

    我们能很容易看出,这三条链接前面都是一样的,只有后面的cursor是不一样的,也就是说,只有我们获得cursor我们就能获得所有的短评链接。那问题来了,我要如何获得这些cursor。
    在这里插入图片描述
    我们点击第一个list,然后在右边Ctrl+F,弹出搜索框,在里面搜到的cursor我们就能找到第二条链接的cursor了。
    这样我们就能从第一个链接爬到最后一个了。

    爬虫开始

    找到链接后,这一步就很简单了。
    大家可以先自己写一下
    代码在这:

    import requests
    import traceback
    import json
    from bs4 import BeautifulSoup
    
    head = """
    Accept:*/*
    Accept-Encoding:gzip, deflate, br
    Accept-Language:zh-CN,zh;q=0.8
    Connection:keep-alive
    Cookie:_uuid=D8921E95-D8CD-BFC6-3BC0-D1F6043F776887304infoc; LIVE_BUVID=AUTO5415414913832945; sid=9y98lpeg; fts=1541502024; buvid3=661DEC67-025B-49CD-9571-B571D8FE72F9115923infoc; rpdid=olqmokllowdosposwiwww; UM_distinctid=166fddf7b4348b-059ec053287482-36624209-144000-166fddf7b4444; bp_t_offset_37429101=190003340221487243; CURRENT_FNVAL=16; stardustvideo=0; DedeUserID=128668516; DedeUserID__ckMd5=4e3d240a24288b0c; SESSDATA=1d112e0c%2C1546603364%2C33f029c1; bili_jct=992ec11646273bfe1fbcdc06f0eef927; CURRENT_QUALITY=112; BANGUMI_SS_25739_REC=250469; BANGUMI_SS_24638_REC=257435; BANGUMI_SS_25733_REC=251085; BANGUMI_SS_2543_REC=258189; Hm_lvt_4e5bdf78b2b9fcb88736fc67709f2806=1543314834,1543365468,1543459162,1544434299; bp_t_offset_128668516=196106067844789385; _dfcaptcha=8a97e23aafd3dbeedd17b19fbedf3b62
    Host:api.bilibili.com
    Referer:https://www.bilibili.com/bangumi/play/ss24588/?from=search&seid=3488276259830397637
    User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36
    """
    
    # 这是将headers的string形式转成字典形式(很方便的)
    def get_html_text(url):
        r = requests.get(url)
        try:
            r.raise_for_status()
            r.encoding = "utf-8"
            return r.text
        except:
            traceback.print_exc()
            return ""
    
    
    def save_data(msg):
        with open("message.csv", "a", encoding="utf-8") as f:
            f.write(",".join(msg) + "\n")
        # 追加存储,如果出现错误,可能需要删除原文件。
        # 文件存储在代码位置。
    
    
    def main(urlbase):
        cnt = 0  #来记录一爬了多少条评论
        total = 1 # total是总共的短评条数
        url = ""
        while cnt < total:   # 评论达到总评论条数就退出
            if not url:
                url = urlbase
            """
            这一步只是方便对url改写,方法可以有很多
            """
            # print(url)
            html = get_html_text(url)
            js = json.loads(html)  # 因为这个链接给我们的是个json的数据格式,直接用就好,不必用BeautifulSoup再加载
            # print(js)
            # print(js["result"])
            L = len(js["result"]["list"]) # 虽说每个列表里都只有20条信息,但到了最后一个列表是不一定的,所以这里要获取list的长度
            for i in range(L - 1):
                single_msg = []
                uname = js["result"]["list"][i]["author"]["uname"]
                ctime = js["result"]["list"][i]["ctime"]
                likes = js["result"]["list"][i]["likes"]
                score = js["result"]["list"][i]["user_rating"]["score"]
                content = js["result"]["list"][i]["content"]
                
                uname = uname.replace(",", ",")
                content = content.replace(",", ",")  
                """
                这里把英文逗号换成中文逗号,是为了存储。因为要存储成csv格式,为了避免出错。如果不用csv存储,就无须这一步。
                """
                single_msg.append(uname)
                single_msg.append(str(score))
                single_msg.append(content)
                single_msg.append(str(ctime))
                single_msg.append(str(likes))
                save_data(single_msg)
            #获取cursor
            cursor = js["result"]["list"][L - 1]["cursor"]
            # save_data(cursor)
            #对链接进行修改
            url = urlbase + "&cursor=" + str(cursor)
            cnt += 20
            total = js["result"]["total"]
    
    #第一条列表链接
    url = "https://bangumi.bilibili.com/review/web_api/short/list?media_id=130412&folded=0&page_size=20&sort=0"
    main(url)
    
    

    total是之前没有说到的
    这东西有什么用呢?
    因为你要爬取所有的评论,那什么时候结束就成了一个问题
    既然是爬取所有的评论,当然是爬完了结束,那什么时候是爬完了,这就是total的意义。控制结束
    total的位置也在list里,很容易看到的。

    然后就是两表一图了

    这东西自己看看就好,一个简单的数据分析。

    from pyecharts import Line
    import time
    
    with open("message.csv", "r", encoding="utf-8") as f:
        single = {}
        id = set()
        for p in f:
            p = p.split(",")
            t = time.strftime("%Y-%m-%d", time.gmtime(eval(p[3])))
            single[t] = single.get(t, 0) + 1
            id.add(t)
        # print(single)
        x = []
        y = []
        t = sorted(id)
        # print(t)
        for i in t:
            x.append(i)
            y.append(single[i])
        line = Line("评论时间分布")
        line.use_theme("dark")
        line.add("评论时间分布", x, y, is_smooth=False, is_fill=True, symbol=None, area_opacity=0.4)
        line.render("picture_line.html")
    
    from pyecharts import Pie
    
    score = []
    with open("message.csv", "r", encoding="utf-8") as f:
        score_dict = {}
        for s in f:
            s = s.split(",")
            k = s[1]
            score_dict[k] = score_dict.get(k, 0) + 1
        # print(score_dict)
        for s in range(2, 12, 2):
            score.append(score_dict[str(s)])
        # print(score)
    attr = ["一星", "二星", "三星", "四星", "五星"]
    pie = Pie(title="评分", title_pos=(0, 0), width=600)
    pie.add("评分", attr, score, center=(50, 50), is_random=False, radius=[45, 75], rosetype="center", is_legend_show=True,
            is_label_show=True)
    pie.render("Pie_picture.html")
    

    效果图:
    在这里插入图片描述
    在这里插入图片描述
    pyecharts这个库安一个就好,百度一下,有官网,有中文文档。
    如果不明白什么是csv的我说一下,就是每个词之间用英文逗号隔开,最后有个换行符。(说的可能不太清楚,不懂百度吧)

    import wordcloud
    import jieba
    
    txt = ""
    with open("memssage.csv", "r", encoding="utf-8") as f:
        for c in f:
            try:
                c = c.split(",")
                txt += c[2]
            except:
                txt += ""
    text = ""
    text += " ".join(jieba.cut(txt, cut_all=False))
    font_path = "msyh.ttc"
    stop_words = set("")
    stop_words.update(['一部', '非常', '完结 撒花', '真的', '我们', '一个', '这部', '这个', '感觉', '完结', '还是', '就是',
                       '还有', '但是', '觉得', '最后', '没有', '看到', '作品', '有点', '知道', '虽然', '为了', '什么', '撒花',
                       '这么', '番剧', '一集', '第三季', '第一集', 'tm', '啊啊啊', '时候', '不是', '已经', '这番'])
    wc = wordcloud.WordCloud(font_path=font_path,
                             stopwords=stop_words,
                             # max_font_size=50,
                             background_color="black",
                             width=1000, height=600, margin=2)
    wc.generate(text)
    
    process_word = wordcloud.WordCloud.process_text(wc, text)
    sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
    print(sort[:50])
    """
    输出前50个出现再多的词,有不想要的,请自行加入stopwords库里
    """
    wc.to_file("Wordcloud.png")
    

    效果图:
    在这里插入图片描述
    做了张词云,挺丑的。

    本人第一次写博客,有什么错误,或用词不当。
    希望大家不吝赐教。

    展开全文
  • Python-B站用户爬虫

    2019-08-10 07:35:34
    B站用户爬虫
  • 本程序需要BeautifulSoup以及requests库,利用python爬虫抓取B站动画区排行榜信息,包括up主名字、视频名字、播放量、综合评分,并生成txt文件进行储存,通过对url进行修改,可以获取其他分区的排行榜信息。
  • 适合学习数据分析得朋友对数据处理、分析操作练手
  • B站爬虫

    千次阅读 2016-09-07 14:38:58
    简单啊的B站爬虫,送上代码: python版本:2.7 #coding:utf-8 __author__ = 'zhengjinwei' import sys reload(sys) sys.setdefaultencoding('utf-8') from lib import spider from lib import fileWriter import ...

    简单啊的B站爬虫,送上代码:

    python版本:2.7

    #coding:utf-8
    __author__ = 'zhengjinwei'
    
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    from lib import spider
    from lib import fileWriter
    import time
    import datetime
    import  os
    import random
    
    
    class BiZhanSpider:
        def __init__(self,userAgent):
            self.spider = spider.Spider(userAgent)
            self.users = {}
            self.curFilePath = self.cur_file_dir()
            
        def cur_file_dir(self):
             #获取脚本路径
             path = sys.path[0]
             #判断为脚本文件还是py2exe编译后的文件,如果是脚本文件,则返回的是脚本的目录,如果是py2exe编译后的文件,则返回的是编译后的文件路径
             if os.path.isdir(path):
                 return path
             elif os.path.isfile(path):
                 return os.path.dirname(path)
    
        #get user info specified
        def getUserSex(self,userUrl,mid,t):
            # print userUrl,mid,t
            import  json
            rep = self.spider.postHttp(userUrl,json.dumps({mid:mid,"_":t}))
            # print rep
    
    
        def getRdv(self):
            v = random.randint(0,1000)
            ret = ""
            if v >= 0 and v < 10:
                ret = "00"+str(v)
            elif v >= 10 and v < 100:
                ret = "0"+str(v)
            else:
                ret = str(v)
            return ret
    
        def getFansApiUrl(self,siteUrl):
            tempStr = siteUrl.replace("http://space.bilibili.com/","")
            tempStr = tempStr.split("/")
            mid = str(tempStr[0])
            pageIndex = str(tempStr[4])
    
            curTimeStamp = str(int(time.mktime(datetime.datetime.now().timetuple())))
            rdv = self.getRdv()
            t = curTimeStamp+rdv
            fansUrl = "http://space.bilibili.com/ajax/friend/GetFansList?mid="+mid+"&page="+pageIndex+"&_="+t
            return fansUrl,mid,t
    
    
        def go(self,pageUrl):
            fansUrl,mid,ts= self.getFansApiUrl(pageUrl)
            contents = self.spider.getRawContent(fansUrl)
    
            userInfoList = []
            import  json
            t = json.loads(contents)
            if t.has_key('data') == True:
                data = t['data']
                if data.has_key('list') == True:
                    list = data['list']
                    # print list
                    if len(list):
                        userInfoUrl = "http://space.bilibili.com/ajax/member/GetInfo"
    
                        for i in range(0,len(list)):
                            userName = list[i]['uname']
                            fid = list[i]['fid']
                            sex = self.getUserSex(userInfoUrl,fid,ts)
                            print userName,fid
                            # userUrl = "http://space.bilibili.com/"+str(fid)+"/#!/index"
                            #
                            # if sex != -1:
                            #     userInfo = {userName:userName,sex:sex}
                            #     userInfoList.append(userInfo)
                            # else:
                            #     pass
                    else:
                        pass
                else:
                    pass
            else:
                pass
    
    demo = BiZhanSpider('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko')
    siteUrl = u"http://space.bilibili.com/2019740/#!/fans/fans/"
    
    
    demo.go(siteUrl)
    


    注意:B站的信息是动态的,需要用fireDebug 查到重定向后的URL去获取列表,详细请看接口:

    getFansApiUrl

    上面用的lib库请参考:贴吧爬虫


    展开全文
  • python爬虫:爬取B站搜索内容

    千次阅读 2022-01-06 15:30:26
    不管我用啥方法都获取不到首页html和json内容,于是乎转战B站。(若有哪位大佬知道最新知乎解密方式望指点一下) 看到网上好多教程都是爬取热榜,今天想尝试一下搜索关键词爬取所有相关内容(思路是一致的) 进入...

    注:爬虫仅可用于娱乐学习,不可用于商业用途(小心牢饭)
    最近闲来无事,想要爬取知乎内容玩一玩,奈何最近知乎又更新了反爬机制!不管我用啥方法都获取不到首页html和json内容,于是乎转战B站。(若有哪位大佬知道最新知乎解密方式望指点一下)
    看到网上好多教程都是爬取热榜,今天想尝试一下搜索关键词爬取所有相关内容(思路是一致的)

    进入开发者工具寻找内容

    以搜索“原神”为例:
    火狐:设置->更多工具->web开发者工具(Ctrl+shift+l)
    Microsoft Edge:F12快捷键
    在弹出的页面内依次点击以下框:在这里插入图片描述在搜索框搜索包含视频信息的url,这里以某一视频八重神子实机演示为例搜索:
    在这里插入图片描述找到记录这一页视频信息的url,进入消息头

    获取相应参数

    复制保存消息头中的url,Cookie,User-Agent信息
    注:Cookie不要全都复制,复制一部分就行(到某一部分分号之前)

    点击GET中链接,可以看到记录的json格式信息:
    可以根据自己的需要在代码中获取哪一部分
    在这里插入图片描述里面有每个视频标题,简介,播放量,关注量,作者id等
    具体自己想要什么,在里面找一下。

    爬取一页内容

    import requests, json
    import pandas as pd
    
    url = '放入你的需要爬取的url'
    headers = {
        'Host': 'api.bilibili.com',
        'user-agent': '你的user-agent',
        'Cookie': '你的Cookie'
    }
    
    title_list, like_list, play_list = [],[],[]
    
    def getdata():
        res = requests.get(url, headers=headers).content.decode('utf-8')
        jsonfile = json.loads(res)
        if (jsonfile['data']):
        		# 爬取内容,根据你想要的内容更改列表和标签
            for content in jsonfile['data']['result']:
                title_list.append(content['title'])
                like_list.append(content['like'])
                play_list.append(content['play'])
    
    getdata()
    Data = {
        '标题': title_list,
        '播放量': play_list,
        '点赞量': like_list
    }
    dataframe = pd.DataFrame(Data=data)
    dataframe.to_excel('./数据.xlsx', index=False, encoding='utf-8')
    print("end")
    

    爬取多页内容

    自己可以尝试一下翻页,翻页之后url发生变化
    下面对其url解析一下:

    GET
    	https://api.bilibili.com/x/web-interface/search/all/v2?context=&page=1&order=&keyword=原神&duration=&tids_1=&tids_2=&from_source=web_search&from_spmid=333.337&platform=pc&__refresh__=true&_extra=&highlight=1&single_column=0
    

    我们可以发现第一页page=1,第二页page=2,其余内容不发生改变
    因此我们想要翻页爬取的时候只需要把page改变就可以了

    首先把url中的page拿出来&page=1
    这时url只有https://api.bilibili.com/x/web-interface/search/all/v2?context=&order=&keyword=原神&duration=&tids_1=&tids_2=&from_source=web_search&from_spmid=333.337&platform=pc&__refresh__=true&_extra=&highlight=1&single_column=0
    每次解析完一页,page+1就可以了

    import requests, json
    import pandas as pd
    
    url = '放入你的需要爬取的url(去掉page)'  # 去掉
    headers = {
        'Host': 'api.bilibili.com',
        'user-agent': '你的user-agent',
        'Cookie': '你的Cookie'
    }
    
    title_list, like_list, play_list = [],[],[]
    
    
    def getdata(start):
    		# 用于输入当前页数
        data = {
            'page': start
        };
        # 读取url中数据
        res = requests.get(url, headers=headers, data=data).content.decode('utf-8')
        # 变为json格式数据
        jsonfile = json.loads(res)
        # 根据自己需求改变下列内容
        if (jsonfile['data']):
            for content in jsonfile['data']['result']:
                title_list.append(content['title'])
                like_list.append(content['like'])
                play_list.append(content['play'])
    
    				# 输出爬取页过程
            print('page'+str(start))
            # 因为每一页最多存放20个视频,判断如果这一页有20个视频,说明还可能有下一页,然后再爬下一页
            if len(jsonfile['data']['result']) == 20:
                getdata(start + 1)
    
    # 从第一页开始获取数据
    getdata(1)
    Data = {
        '标题': title_list,
        '播放量': play_list,
        '点赞量': like_list
    }
    dataframe = pd.DataFrame(data=Data)
    dataframe.to_excel('./数据2.xlsx', index=False, encoding='utf-8')
    print("end")
    
    展开全文
  • B 1. 爬取评论 V1.1 爬取了两份数据: 1. comments_all :包含直接显示的评论和对这条评论的回复 2. comments_main : 只包含这个视频下的主要评论(针对评论的回复不在其中) import json import re from urllib....
  • B站评论爬虫

    千次阅读 2020-02-22 12:26:47
    是一个很简易的爬虫,我自己作业用一下下,参考的是B站一位叫大野喵渣的up的视频,点我看 在这个基础上根据我自己的水平和需要稍作修改,希望能给向我一样不知爬虫为何物但是确实需要用的24k纯小白一些帮助。 这里只...
  • 爬虫 爬取B站Up主所有视频标题、播放量以及三年数量
  • b站用户数据共947228条记录,包括id、mid、name、sex、following、fans、level不涉及用户隐私信息,主要用户学校数据分析、数据挖掘、大数据大作业或者比赛用的原始数据。
  • 运行环境 python3.9.6 +MariaDB(termux官方封装安装顺利) ...#安装简易爬虫需要的库 pip install pymysql 安装MariaDB并在里面建表 #安装MariaDB pkg install mariadb #初始化数据库 mysql_install_db
  • 【Python】爬虫-----下载B站视频

    千次阅读 2021-12-17 22:13:06
    重点来了:通过测试可得,这些url是有分布规律的,页面中第一次出现的.m4s的url,是清晰度的最高的,如果你是b站大会员并且视频支持4K的话,那么第一条url的清晰度就是4K,第二条则是第一条url的备用链接,也就是说...
  • 爬虫脚本项目源码-解除B站滑块验证码
  • python爬虫b站三国演义全集弹幕
  • B站视频封面爬虫,将代码中的url替换成视频链接,运行就能打印出封面的链接地址,然后复制到浏览器打开即可
  • python爬虫初试:B站评论区爬取

    千次阅读 多人点赞 2020-06-15 17:59:14
    Python 网络爬虫实战:爬取 B站《全职高手》20万条评论数据 爬虫翻页技巧 本次爬取目标是最近看的一个很喜欢的描改手书的评论区,链接: 【幸运星】永远都想对战游戏的泉此方【永遠にゲームで対戦したいコナタン】 ...
  • 心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibili.com/9444976 后面...
  • 众所周知,b站上有很多视频资源,非常诱人,但是这些视频又不好下载,于是我就琢磨着爬取了一下b站首页的热门推荐视频。
  • 爬虫实战 - 如何爬取B站视频评论?

    千次阅读 多人点赞 2020-11-21 21:19:39
    (本次爬虫仅以一个视频为示例:链接) 查找评论请求api 解析URL 去掉第一个和最后一个参数可得评论URL,即:https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn=1&type=1&oid=585286365&sort=2...
  • 一个朋友的要求,对B站UP主的视频进行分析。至于要做什么,你懂的。 核心 使用B站提供的API,爬取数据,进行分析。具体B站提供的API就不说了,https://www.bilibili.com/read/cv3430609/,自己看去。 获取UP主的...
  • 项目:爬虫B站视频排行榜热度,并数据可视化 摘要 该实验主要是用python编写爬虫代码,把爬取到的数据进行整理,上传到flourish网站,进行数据最后的可视化。本次实现的是爬取B站的每天视频排行榜的前100名(根据...
  • B站爬虫程序 很不错的一个程序,有兴趣的看下。
  • c#整站爬虫源代码.rar

    2020-03-07 22:32:32
    C# 网页爬虫,针对一个网站,爬取解析出的所有的超链接,以实现所有站点资源的下载。 本代码是在以为大神的基础上经过修改而成。
  • 最近马保国老师在b站挺火的,关于他的视频播放量很高,b站视频评论区都是人才说话好听,写个爬虫爬取一下b站评论区用户信息和评论内容。 一.准备工作 1.工具 (1)Chrome 谷歌浏览器 安装地址:...
  • B站2千万视频信息爬虫

    千次阅读 2018-10-26 18:45:13
    B站视频信息(av号,播放量,弹幕数,硬币数,分享量,评论数,收藏数)爬虫 本项目最后更新于2018-6-4,可能会因为没有更新而失效。如已失效或需要修正,请联系我! 相关文章:B站用户信息爬虫 在写这个项目时,我还...
  • b站网络爬虫.rar

    2021-09-09 16:01:23
    b站网络爬虫.rar
  • ** ** ##直接上代码和效果图 ** ** 有空再详细讲解 import requests import re import time import json def get_info(): headers = { 'Host': 'api.bilibili.com', 'Referer': '...
  • B站运营

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,797
精华内容 42,318
关键字:

b站爬虫

友情链接: ihschange-master.zip