鱼C论坛

 找回密码
 立即注册
查看: 1200|回复: 3

爬取b站视频数据的时候,换了个网址就报错了

[复制链接]
发表于 2021-9-24 14:15:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
两个url:

url1:https://s.search.bilibili.com/ca ... mp;time_to=20210924

url2:https://s.search.bilibili.com/ca ... mp;time_to=20210924

两个url就cate_id不一样,一个171,一个172

url1不报错,url2报错,我把pagesize改成5又不报错了,然后新建一个文件测试 play_data2(url) 这个函数,pagesize=100 也没报错,不知道什么情况
2021_09_24_14_09.25.bmp

代码:

  1. import requests
  2. import json
  3. import time
  4. import random
  5. import pandas as pd
  6. import re

  7. def play_data1(number):
  8.     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'}
  9.     url = 'https://www.bilibili.com/video/%s'%number
  10.     res = requests.get(url, headers = headers).text

  11.     '''
  12.     播放量:view
  13.     弹幕:danmaku
  14.     点赞:like
  15.     投币:coin
  16.     收藏:favorite
  17.     分享:share
  18.     '''

  19.     r = re.findall(r'"stat":\{"aid":.*?\}', res)
  20.     r = str(r)


  21.     view = re.findall(r'"view":(.*?),', r)
  22.     danmaku = re.findall(r'"danmaku":(.*?),', r)
  23.     like = re.findall(r'"like":(.*?),', r)
  24.     coin = re.findall(r'"coin":(.*?),', r)
  25.     favorite = re.findall(r'"favorite":(.*?),', r)
  26.     share = re.findall(r'"share":(.*?),', r)
  27.     d = {
  28.         '播放量': view[0],
  29.         '弹幕': danmaku[0],
  30.         '点赞': like[0],
  31.         '投币': coin[0],
  32.         '收藏': favorite[0],
  33.         '分享': share[0]
  34.     }
  35.     return d

  36. def play_data2(url):
  37.     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'}

  38.     res = requests.get(url, headers=headers).text

  39.     r1 = res.encode('utf-8').decode('unicode_escape')
  40.     r2 = re.findall(r'\{"senddate":[\s\S]*?\}', r1)

  41.     l = []
  42.     for i in r2:
  43.         i_json = json.loads(i, strict = False)
  44.         l.append({
  45.             'title': i_json['title'],
  46.             'arcurl': i_json['arcurl'],
  47.             'bvid': i_json['bvid'],
  48.             'author': i_json['author'],
  49.             'pubdate': i_json['pubdate'],
  50.             'tag': i_json['tag'],
  51.             'review': i_json['review'],
  52.             'duration': i_json['duration']
  53.         })

  54.     return l

  55. def merge_data(url):
  56.     l = play_data2(url)

  57.     for l_1 in l:
  58.         print(1)
  59.         d = play_data1(l_1['bvid'])
  60.         l_1.update(d)
  61.         time.sleep(random.randint(1, 3))

  62.     dd = {'title':[],
  63.           'arcurl':[],
  64.           'bvid':[],
  65.           'author':[],
  66.           'pubdate':[],
  67.           'tag':[],
  68.           'review':[],
  69.           'duration':[],
  70.           "播放量":[],
  71.           "弹幕":[],
  72.           "点赞":[],
  73.           "投币":[],
  74.           "收藏":[],
  75.           "分享":[], }
  76.     for l_2 in l:
  77.         dd['title'].append(l_2['title'])
  78.         dd['arcurl'].append(l_2['arcurl'])
  79.         dd['bvid'].append(l_2['bvid'])
  80.         dd['author'].append(l_2['author'])
  81.         dd['pubdate'].append(l_2['pubdate'])
  82.         dd['tag'].append(l_2['tag'])
  83.         dd['review'].append(l_2['review'])
  84.         dd['duration'].append(l_2['duration'])
  85.         dd["播放量"].append(l_2["播放量"])
  86.         dd["弹幕"].append(l_2["弹幕"])
  87.         dd["点赞"].append(l_2["点赞"])
  88.         dd["投币"].append(l_2["投币"])
  89.         dd["收藏"].append(l_2["收藏"])
  90.         dd["分享"].append(l_2["分享"])

  91.     return dd

  92. def convert_dic_to_dataframe(dic):
  93.     data = pd.DataFrame(dic)
  94.     data.to_csv(r'手机游戏.csv', encoding="utf_8_sig")

  95. url = 'https://s.search.bilibili.com/cate/search?main_ver=v3&search_type=video&view_type=hot_rank&order=click&copy_right=-1&cate_id=172&page=1&pagesize=100&jsonp=jsonp&time_from=20210917&time_to=20210924'

  96. convert_dic_to_dataframe(merge_data(url))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-24 17:48:33 | 显示全部楼层
有个评论的字符画里有反斜杠,导致报错了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-24 17:57:01 | 显示全部楼层
suchocolate 发表于 2021-9-24 17:48
有个评论的字符画里有反斜杠,导致报错了。

是json.loads(str)里不能有反斜杆吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-24 18:02:53 | 显示全部楼层
suchocolate 发表于 2021-9-24 17:48
有个评论的字符画里有反斜杠,导致报错了。

但是这样可以爬取视频数据
  1. import requests
  2. import re
  3. import json

  4. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'}
  5. url = 'https://s.search.bilibili.com/cate/search?main_ver=v3&search_type=video&view_type=hot_rank&order=click&copy_right=-1&cate_id=172&page=100&pagesize=5&jsonp=jsonp&time_from=20210917&time_to=20210924'

  6. def play_data2(url):
  7.     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'}

  8.     res = requests.get(url, headers=headers).text

  9.     r1 = res.encode('utf-8').decode('unicode_escape')
  10.     r2 = re.findall(r'\{"senddate":[\s\S]*?\}', r1)

  11.     l = []
  12.     for i in r2:
  13.         i_json = json.loads(i, strict = False)
  14.         l.append({
  15.             'title': i_json['title'],
  16.             'arcurl': i_json['arcurl'],
  17.             'bvid': i_json['bvid'],
  18.             'author': i_json['author'],
  19.             'pubdate': i_json['pubdate'],
  20.             'tag': i_json['tag'],
  21.             'review': i_json['review'],
  22.             'duration': i_json['duration']
  23.         })

  24.     return l
  25. print(play_data2(url))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表