【爬虫】 使用AI编写B站爬虫代码

news2024/11/23 21:18:21

记录一次,自己不写一行代码,所有的代码全由AI编写的过程。


本次使用的AI工具为:Claude
其他AI工具同理。


首先,观察哔哩哔哩网页的结构,定位到了包含视频信息的关键元素。右键检查或打开F12,找到最左侧的这个选择元素的按钮(元素检查器),点击一下。然后鼠标移动到第一个视频的标题部分会有浅色的背景显示,点击一下。

在这里插入图片描述
接下来,找到对应的元素后,复制相关的代码。
在这里插入图片描述

然后,根据复制的代码,编写AI的提示词:

你是一个专业的python爬虫程序员,现在请你帮我写一个python爬虫程序,用于爬取哔哩哔哩的热榜数据。要求如下:  

1. 爬取网站:https://www.bilibili.com/v/popular/all  
2. 爬取内容:标题,作者,视频链接,观看量,视频图片链接 
3. 爬取后的内容,请保存为csv文件 

网站的前端一个视频的元素为:
<div data-v-507d2d1a="" data-v-78bc95a6="" class="video-card"><div data-v-507d2d1a="" class="video-card__content"><a data-v-507d2d1a="" href="//www.bilibili.com/video/BV114421U75X" target="_blank"><img data-v-507d2d1a="" class="lazy-image cover-picture__image" data-src="//i2.hdslb.com/bfs/archive/65cbaf02664e32d7d022886250ed178ae2f29024.jpg@412w_232h_1c_!web-popular.avif" src="//i2.hdslb.com/bfs/archive/65cbaf02664e32d7d022886250ed178ae2f29024.jpg@412w_232h_1c_!web-popular.avif" lazy="loaded"></a> <div data-v-507d2d1a="" class="watch-later van-watchlater black"><span class="wl-tips" style="left: -21px; display: none;"></span></div></div> <div data-v-507d2d1a="" class="video-card__info"><p data-v-507d2d1a="" title="纯黑《黑神话:悟空》全程无伤攻略解说 第一期" class="video-name">纯黑《黑神话:悟空》全程无伤攻略解说 第一期</p> <div data-v-507d2d1a=""><span data-v-507d2d1a="" class="rcmd-tag strong-tag">百万播放</span> <span data-v-507d2d1a="" class="up-name"><svg data-v-507d2d1a="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 18 18" width="18" height="18" style="width: 18px; height: 18px; margin-right: 4px;">
****************************
***省略部分内容(太长了)*******
****************************
 <!----> <!----></div></div></div>

在这里插入图片描述

将上述提示词发给AI后,AI会编写如下代码:

import requests
from bs4 import BeautifulSoup
import csv

# 目标URL
url = "https://www.bilibili.com/v/popular/all"

# 发送HTTP请求并获取页面内容
response = requests.get(url)
html_content = response.content

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, "html.parser")

# 找到所有视频卡片元素
video_cards = soup.find_all("div", class_="video-card")

# 创建CSV文件并写入标题行
with open("bilibili_hotlist.csv", "w", newline="", encoding="utf-8") as csvfile:
    fieldnames = ["title", "author", "video_link", "views", "image_link"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    # 遍历每个视频卡片,提取所需信息并写入CSV
    for video_card in video_cards:
        title = video_card.find("p", class_="video-name").text.strip()
        author = video_card.find("span", class_="up-name__text").text.strip()
        video_link = "https://www.bilibili.com" + video_card.find("a")["href"]
        views = video_card.find("span", class_="play-text").text.strip()
        image_link = video_card.find("img", class_="cover-picture__image")["data-src"]

        writer.writerow({
            "title": title,
            "author": author,
            "video_link": video_link,
            "views": views,
            "image_link": image_link
        })

print("数据已保存到 bilibili_hotlist.csv 文件中.")

运行后,虽然输出了csv文件,但是没有任何数据,接下来继续和AI进行对话,让他帮忙修改bug。
在这里插入图片描述
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
import csv
import time

# 目标URL
url = "https://www.bilibili.com/v/popular/all"

# 发送HTTP请求并获取页面内容
response = requests.get(url)
html_content = response.content

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, "html.parser")

# 检查数据是否在初次加载的HTML中
if not soup.find_all("div", class_="video-card"):
    print("数据似乎是通过JavaScript动态加载的,需要进一步处理.")

    # 使用Selenium模拟浏览器加载页面
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get(url)
    time.sleep(5)  # 等待5秒钟让页面加载完毕
    html_content = driver.page_source
    soup = BeautifulSoup(html_content, "html.parser")

# 找到所有视频卡片元素
video_cards = soup.find_all("div", class_="video-card")

# 创建CSV文件并写入标题行
with open("bilibili_hotlist.csv", "w", newline="", encoding="utf-8") as csvfile:
    fieldnames = ["title", "author", "video_link", "views", "image_link"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    # 遍历每个视频卡片,提取所需信息并写入CSV
    for video_card in video_cards:
        title = video_card.find("p", class_="video-name").text.strip()
        author = video_card.find("span", class_="up-name__text").text.strip()
        video_link = "https://www.bilibili.com" + video_card.find("a")["href"]
        views = video_card.find("span", class_="play-text").text.strip()
        image_link = video_card.find("img", class_="cover-picture__image")["data-src"]

        writer.writerow({
            "title": title,
            "author": author,
            "video_link": video_link,
            "views": views,
            "image_link": image_link
        })

print("数据已保存到 bilibili_hotlist.csv 文件中.")

这次爬取到了数据,但是只有21条。自己观察可以发现,其实就是因为哔哩哔哩没有完全加载数据,导致爬虫爬取的时候就爬了第一次加载到的数据。接下来继续和AI进行对话,让他修改Bug。
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
import csv
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# 目标URL
url = "https://www.bilibili.com/v/popular/all"

# 初始化 Selenium 驱动
driver = webdriver.Chrome()
driver.get(url)

# 向下滚动页面直至底部
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 向下滚动页面
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(5)  # 等待 5 秒钟

    # 计算新的页面高度
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 获取完整的页面源代码
html_content = driver.page_source

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(html_content, "html.parser")

# 找到所有视频卡片元素
video_cards = soup.find_all("div", class_="video-card")

# 创建 CSV 文件并写入标题行
with open("bilibili_hotlist.csv", "w", newline="", encoding="utf-8") as csvfile:
    fieldnames = ["title", "author", "video_link", "views", "image_link"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    # 遍历每个视频卡片,提取所需信息并写入 CSV
    for video_card in video_cards:
        title = video_card.find("p", class_="video-name").text.strip()
        author = video_card.find("span", class_="up-name__text").text.strip()
        video_link = "https://www.bilibili.com" + video_card.find("a")["href"].lstrip("/")
        views = video_card.find("span", class_="play-text").text.strip()
        image_link = video_card.find("img", class_="cover-picture__image")["data-src"]

        writer.writerow({
            "title": title,
            "author": author,
            "video_link": video_link,
            "views": views,
            "image_link": image_link
        })

driver.quit()
print("数据已保存到 bilibili_hotlist.csv 文件中.")

在这里插入图片描述

这次成功的把哔哩哔哩的热榜数据全部爬取下来了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024前端面试题-js篇

1.js有哪些数据类型 基础数据类型&#xff1a;string,number,boolean&#xff0c;null&#xff0c;undefined&#xff0c;bigInt&#xff0c;symbol 引用数据类型&#xff1a;Object 2.js检测数据类型的方式 typeof&#xff1a;其中数组、对象、null都会被判断为object&…

基于WebSocket打造的一款SSH客户端

引用&#xff1a;Java打造一款SSH客户端&#xff0c;而且已开源_java ssh客户端-CSDN博客 由于原作者是放在Github上&#xff0c;不方便下载&#xff0c;所以下载下来&#xff0c;转存到码云上&#xff0c;地址&#xff1a;https://gitee.com/lfw1024/web-ssh 为了满足一些小白…

计算机毕业设计选题推荐-股票数据可视化分析与预测-Python爬虫

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Windows10拿到shell后远程登录

一、准备工作 kali机&#xff1a;192.168.19.130 win10&#xff1a;192.168.19.133 主机&#xff1a;192.168.1.73&#xff08;自己操作可以在kali上&#xff0c;我这是因为反弹的shell在主机上&#xff09; 二、开启远程登录 1.win10上关闭实时保护&#xff0c;并且运行了…

[C++] C++11详解 (一)

标题&#xff1a;[C] C11详解 (一) 水墨不写bug 目录 前言 一、列表初始化 二、STL的初始化列表&#xff08;initializer_list —— Cplusplus.com&#xff09; 三、声明方式&#xff08;auto、decltype、nullptr&#xff09; 1.auto ​编辑 2.decltype 正文开始&#x…

Spark环境搭建-Local

目录 Local下的角色分布&#xff1a; Anaconda On Linux 安装 (单台服务器) 1.下载安装 2.国内源 下载Spark安装包 1.下载 2.解压 3.环境变量 测试 监控 Local下的角色分布&#xff1a; 资源管理&#xff1a; Master&#xff1a;Local进程本身 Worker&#xff1a;L…

UE5.4 - 编辑器页面和概念术语

目录 一. 打开新项目 二. 主页面 1.菜单栏 2.工具栏 3.视口 4.内容侧滑菜单/内容浏览器 5.底部工具栏 6.大纲 7.细节面板 三. 虚幻引擎术语 四. 进一步的术语 五. 总结 一. 打开新项目 选择 虚幻引擎 -> 库 -> 启动 选择类型,选择示例的项目,可以把这些都选选…

探索WebSocket在ASP.NET Core中的实时通信应用与实现策略

文章目录 前言一、创建 ASP.NET Core 项目二、配置中间件以支持 WebSocket1.启动类Program.cs2.WebSocket连接管理器3.WebSocket事件管理器4.WebSocket连接入口 三、客户端实现总结 前言 在 ASP.NET Core 中集成 WebSocket 是一种实现实时通信的有效方式。WebSocket 提供了一个…

什么是TCP三次握手和四次挥手,TCP协议详细解析!零基础入门到精通,收藏这一篇就够了

TCP是TCP/IP协议族中一个最核心的协议&#xff0c;它向下使用网络层IP协议&#xff0c;向上为应用层HTTP、FTP、SMTP、POP3、SSH、Telnet等协议提供支持。本文给出TCP报文格式的详细说明&#xff0c;介绍网络数据包传递中如何进行地址解析、建立TCP连接的三次握手过程以及断开T…

【docker】使用github action来自动发布项目到dockerhub

本文首发于 ❄️慕雪的寒舍 使用github action来自动发布项目到dockerhub。参考 https://msdemt.github.io/p/github-action-build-docker/ 博客 1.准备工作 1.1 dockerhub token https://hub.docker.com/settings/security 登录dockerhub&#xff0c;在用户的account settin…

【具体数学 Concrete Mathematics】1.1 递归问题 讲义

【具体数学 Concrete Mathematics】1.1 递归问题 导入 本节(1.1、1.1.1-1.1.3)主要围绕《具体数学》第一章 递归问题&#xff08;Recurrent Problems&#xff09;讲义部分的三个问题展开&#xff0c;分别是汉诺塔、平面上的直线以及约瑟夫问题。下面简单介绍一下递归问题和数学…

复数的处理

复数的处理 复数 V V V 定义为在 ( x , y ) (x,y) (x,y)-平面中实数对的有序集合。在这方面&#xff0c;复数可以被视为原点 ( 0 , 0 ) (0,0) (0,0) 上的向量。从这个角度看&#xff0c;复数的加法类似于 ( x , y ) (x,y) (x,y)-平面中向量的加法。 然而&#xff0c;乘法…

Vue3 国际化i18n语言库 网站多语言切换

介绍 在 Vue 3 项目中&#xff0c;国际化&#xff08;i18n&#xff09;是一个常见的需求&#xff0c;它允许你的应用支持多种语言&#xff0c;并根据用户的语言偏好显示相应的内容。为了实现国际化&#xff0c;你可以使用 vue-i18n 这个库&#xff0c;它是 Vue 官方推荐的国际…

vue常见**MS题 [2]

vue问题及理解 1、介绍一下vue2和vue3的区别 ‌Vue2和Vue3的主要区别体现在双向数据绑定原理、生命周期钩子函数、API、多根节点、性能和体积等方面。‌‌双向数据绑定原理‌&#xff1a;Vue2使用Object.defineProperty实现双向数据绑定&#xff0c;而Vue3则利用ES6的Proxy特性…

赚大钱和赚小钱,哪个更累?

最近一直在质疑我在做的项目&#xff0c;虽然有同行做到了很好的成绩&#xff0c;但是我还是质疑。 因为一直在赚小钱&#xff0c;接触到的也是新手、底层客户、墨迹客户。 越是钱少的生意&#xff0c;越不好做&#xff0c;客户越挑剔。 而且赚小钱会消磨人的心智。 前几年…

解决前端访问IIS服务器发生跨域请求报错的方法

现在WEB开发都是前后端分离的模式了&#xff0c;当前端代码访问后端WEB服务器时&#xff0c;经常会发生跨域请求报错的问题。   如果是IIS服务器&#xff0c;可以通过下面的方式轻松解决。   由于出现跨域问题是因为服务器返回的页面在返回头中没有设置“Access-Control-Al…

Servlet---Web会话跟踪 ▎token令牌

▍为什么要进行Web会话跟踪? http请求是无状态的,不携带用户信息的,当用户登录成功后,之后在于服务器交互时,服务器并不知道是哪个用户发送的请求 ▍Web会话跟踪 解决方法:在用户成功登录后,后端向前端响应token令牌(token令牌:用户信息),前端保存token令牌每次访问后端都先…

药店药品进销存管理系统药品出库药品入库药品销售-社区医院药品管理-基于JAVA+vue开发

2.2 业务流程分析 在进行业务流程分析时&#xff0c;需要按照原有信息流动过程&#xff0c;逐个地调查分析所有环节的处理业务、处理内容、处理顺序和对处理时间的要求&#xff0c;弄清各个环节需要的信息、信息来源、流经去向、处理方法、计算方法、提供信息的时间和信息形态…

Hadoop 中的大数据技术:Zookeeper安装 (2)

目录 下载地址 本地模式安装 1&#xff09;安装前准备 2&#xff09;配置修改 3&#xff09;操作 Zookeeper 配置参数解读 Zookeeper 集群操作 集群规划 解压安装 配置服务器编号 配置 zoo.cfg 文件 集群操作 Zookeeper 集群启动停止脚本 创建脚本 增加脚本执行权限 …

EmguCV学习笔记 C# 6.1 边缘检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…