关于b站视频排行榜各视频数据的正则表达式

想做个b站爬虫,在社区老哥的帮助下解决了视频链接获取的问题,但想再用正则表达式获取标题的时候,得到的却是作者空间的链接。

这个爬虫基本思路是利用bs4获取页面的html代码,然后正则表达式提取信息。

这个是b站视频的html代码

<li data-id="421946246" data-rank="1" class="rank-item"><div class="num">1</div> <div class="content"><div class="img"><a href="//www.bilibili.com/video/BV1N3411b7Bo" target="_blank"><img class="lazy-image cover" data-src="//i0.hdslb.com/bfs/archive/4b49d94599d2aff64e76e5a8e1f7bb38ff195b61.jpg@228w_140h_1c.webp" src="//i0.hdslb.com/bfs/archive/4b49d94599d2aff64e76e5a8e1f7bb38ff195b61.jpg@228w_140h_1c.webp" lazy="loaded"></a> <div class="w-later van-watchlater"><span class="wl-tips" style="display:none;"></span></div></div> <div class="info"><a href="//www.bilibili.com/video/BV1N3411b7Bo" target="_blank" class="title">离大谱!随机帮别人实现梦想,竟然跑断了腿(物理)!</a> <!----> <div class="detail"><span class="data-box"><i class="b-icon play"></i>
              566.4万
            </span> <span class="data-box"><i class="b-icon view"></i>
              8.3万
            </span> <a target="_blank" href="//space.bilibili.com/546195"><span class="data-box up-name"><i class="b-icon author"></i>
                老番茄
              </span></a></div> <div class="pts"><div>9317813</div>综合得分
          </div></div> <div class="other-panel"><div class="other"><a target="_blank" href="//www.bilibili.com/video/BV1Bi4y1o7uj" class="other-link"><span class="title">好兄弟是什么,能吃吗?</span> <span>综合评分</span> <strong>2733969</strong></a></div> <a class="more-data" style="display:none;">
    显示UP主全部上榜视频
    <i></i></a></div></div></li>

这是我的python代码

import sys
import re
import urllib.request
import xlwt
from bs4 import BeautifulSoup

#正则表达式定义筛选规则
findLink=re.compile(r'<a href="//(.*?)" target="_blank">.*?</a>',re.S)#视频链接

#获取对应url网页的数据
def get_url(url):
    head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34"}#模拟计算机
    request = urllib.request.Request(url,headers=head)#以headers身份访问url网页
    html=''
    try:
        reponse = urllib.request.urlopen(request)
        html = reponse.read().decode('utf-8')
    except urllib.error.URLError as e:
        if hasattr(e,'code'):
            print(e.code)
        if hasattr(e,'reason'):
            print(e.reason)
    return html

#调用get_url函数获取指定网页数据,以html形式存储
def get_data(baseurl):
    data_list=[]
    html=get_url(baseurl)#获取get_url爬到的数据
    soup=BeautifulSoup(html,'html.parser')#定义使用html解读器解读数据的变量soup
    for item in soup.find_all('div',class_="content"):
        data=[]#存储单个视频全部信息
        
        item=str(item)#字符串化
        
        link=re.findall(findLink,item)[0]#视频链接
        data.append(link)
        
        authorlink=re.findall(findLink,item)[1]#作者链接(原本想获取标题)
        data.append(authorlink)
        
        data_list.append(data)#保存数据
    print(data_list)
    return data_list

get_data('https://www.bilibili.com/v/popular/rank/all')

以及问一下,排行榜里的其他信息有办法用正则表达式写出来吗?鄙人没学过html,纯粹是依葫芦画瓢的。

可以直接用正则,不需要去解析
正则代码如下

import re
import requests
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}

url='https://www.bilibili.com/v/popular/rank/all'
res=requests.get(url,headers=headers)
# print(res.text)

title=re.findall('class="title">(.*?)</a> <!----> <div class="detail"',res.text)
href=re.findall('<div class="info"><a href="//(.*?)" target="_blank"',res.text)
all_sorce=re.findall('</span></a></div> <div class="pts"><div>(.*?)</div>',res.text)

for i in range(len(title)):
     print('标题为:',title[i])
     print('链接为:',href[i])
     print('综合得分为:',all_sorce[i])
     print('----------分割线----------')

我是JAVA爬虫,我用xpath解析,python的xpath写法你搜下