吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4233|回复: 14
收起左侧

[Python 转载] python爬取bilibili编程区的视频信息

  [复制链接]
牵手丶若相惜 发表于 2019-11-25 19:34
本帖最后由 牵手丶若相惜 于 2020-11-12 17:06 编辑

仅限学习!仅限学习!!仅限学习!!!
为了爬虫不影响别人的服务器  我每爬取一页等待了3秒 这是必要的
评分!!!评分!!!评分!!!谢谢
——————————————————————
有人说代码有问题 我就看了一下 最开始以为自己复制的时候忘改了
但是现在发现 是发帖的这个编辑器把我的information【i】转义成一种字体了
你仔细看看就会发现 那个地方的代码字体都不一样
现在改过来了 我把information【i】改成information[x]了
只能用中文的中括号 来告诉你们哪里错了,不然还是会转义
——————————————————————
刚开始以为bilibili对爬虫很友好,没有反爬机制,结过踩了两个坑 写入时长的时候故意重新开了一行 方便自己看
数据太多截图没显示完 具体可以看代码 上面有我写入的数据都是什么
抓取的位置和信息还有踩坑的图在下面
第一个是:一开始抓取的网页是假的,没发现 结果返回的数据不对,多点两页就看出来了
第二个是:它返回的数据是字符串 不是json格式的 输出一下就看出来了
代码如下:
[Asm] 纯文本查看 复制代码
import requests
import json
import time
# 网址
url = "https://api.bilibili.com/x/web-interface/search/all/v2"

# 浏览器代{过}{滤}理
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
    "referer": "https://api.bilibili.com/x/web-interface/search/all/v2?context=&page=1&order=&keyword=%E7%BC%96%E7%A8%8B&duration=&tids_1=&tids_2=&__refresh__=true&highlight=1&single_column=0&jsonp=jsonp&callback=__jp2"
}

# 网页后缀
parameters = {
    "context": "",
    "page": "3",
    "order": "",
    "keyword": "编程",
    "duration": "",
    "tids_1": "",
    "tids_2": "",
    "__refresh__": "true",
    "search_type": "video",
    "highlight": "1",
    "single_column": "0",
    "jsonp": "jsonp",
    "callback": "__jp1",
}

# 格式化时间戳 转换成时间格式
def Transformation_time(pud_times):
    timearray = time.localtime(pud_times)
    format_time = time.strftime("%Y-%m-%d %H:%M:%S", timearray)
    return format_time

# 去除数据中的多余的杂乱字符
def data_fromat(data):
    limit = ["#", ";", ",", " ", "【", "】", "\n", "\t", '\r' ,'<emclass="keyword">', "</em>"]
    # 遍历分隔符 替换成空
    for i in limit:
        data = data.replace(i, "")
    return data


# # 筛选数据并写入
def screening_data(data):
    # 每一页的所有数据都在这个数组里
    information = data["data"]["result"][8]["data"]
    for x in range(len(information)):
        with open("d:/bilibili_programming1.txt","a",encoding="utf-8") as file:
            file.write(("up主:"+information[x]["author"]+"\t"))
            file.write(("url:"+information[x]["arcurl"]+"\t"))
            # 调用data_fromat剔除多余字符
            file.write(("标题:"+data_fromat(information[x]["title"])+"\t"))
            # 调用data_fromat剔除多余字符
            file.write(("描述:" + data_fromat(information[x]["description"]) + "\t"))
            file.write(("播放量:" + str(information[x]["play"]) + "\t"))
            file.write(("弹幕量:" + str(information[x]["video_review"]) + "\t"))
            file.write(("收藏量:" + str(information[x]["favorites"]) + "\t"))
            file.write(("标签:" + information[x]["tag"] + "\t"))
            file.write(("评论量:" + str(information[x]["review"]) + "\t"))
            # 转换成时间格式
            file.write(("发布日期:" + Transformation_time(information[x]["pubdate"]) + "\n"))
            file.write(("时长(分):" + str(information[x]["duration"]) + "\n"))

if __name__ == '__main__':
    for i in range(1, 51):
        if i >= 2:
            headers["referer"] = "https://api.bilibili.com/x/web-interface/search/all/v2?context=&page="+str(i-1)+"&order=&keyword=%E7%BC%96%E7%A8%8B&duration=&tids_1=&tids_2=&__refresh__=true&highlight=1&single_column=0&jsonp=jsonp&callback=__jp2"
        parameters["page"] = i
        # 获取的数据转成text然后去除多余字符,再从转成json格式
        datas = json.loads((requests.get(url,params=parameters,headers=headers).text).replace("__jp1(","").replace(")",""))
        screening_data(datas)
        time.sleep(3)

第一次踩坑

第一次踩坑

第二次踩坑

第二次踩坑

爬取好的数据

爬取好的数据

爬取的位置

爬取的位置

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
wangyiling2018 + 1 + 1 用心讨论,共获提升!
MyJarvis + 1 + 1 用心讨论,共获提升!
chobitswork + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yjn866y 发表于 2019-11-26 19:37
Traceback (most recent call last):
  File "E:/python小课/爬取bilibili编程区.py", line 73, in <module>
    screening_data(datas)
  File "E:/python小课/爬取bilibili编程区.py", line 51, in screening_data
    file.write(("up主:"+information["author"]+"\t"))
TypeError: list indices must be integers or slices, not str
>>> 出现如上错误提示,楼主分析。。谢谢
itcfan 发表于 2019-11-26 15:46
D:\Python>python bilibili.py
Traceback (most recent call last):
  File "bilibili.py", line 73, in <module>
    screening_data(datas)
  File "bilibili.py", line 51, in screening_data
    file.write(("up主:"+information["author"]+"\t"))
TypeError: list indices must be integers or slices, not str


这是什么情况?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
牵手丶若相惜 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!

查看全部评分

cj13888 发表于 2019-11-27 10:25
 楼主| 牵手丶若相惜 发表于 2019-11-27 18:59
本帖最后由 牵手丶若相惜 于 2019-11-27 19:38 编辑
itcfan 发表于 2019-11-26 15:46
D:\Python>python bilibili.py
Traceback (most recent call last):
  File "bilibili.py", line 73, in  ...

有些代码被转义成字体了
 楼主| 牵手丶若相惜 发表于 2019-11-27 19:11
本帖最后由 牵手丶若相惜 于 2019-11-27 19:38 编辑
yjn866y 发表于 2019-11-26 19:37
Traceback (most recent call last):
  File "E:/python小课/爬取bilibili编程区.py", line 73, in
     ...

有些代码被转义成字体了
 楼主| 牵手丶若相惜 发表于 2019-11-27 19:22
本帖最后由 牵手丶若相惜 于 2019-11-27 19:38 编辑
yjn866y 发表于 2019-11-26 19:37
Traceback (most recent call last):
  File "E:/python小课/爬取bilibili编程区.py", line 73, in
     ...

现在已经修改
yjn866y 发表于 2019-11-27 20:20
本帖最后由 yjn866y 于 2019-11-27 20:22 编辑

看到了,,谢谢楼主,,试试
itcfan 发表于 2019-11-28 21:29
牵手丶若相惜 发表于 2019-11-27 18:59
有些代码被转义成字体了

发贴时,使用“添加代码文字”功能,这样就不会转义了。
Hatsune_miku 发表于 2019-12-4 10:30
你只需要把callback这个参数删掉就行了,最后应该是jsonp=jsonp 这样就不会有_jp1了,可以直接用request的json方法,而无需引入json模块。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 19:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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