鱼C论坛

 找回密码
 立即注册
查看: 122|回复: 1

爬取B站

[复制链接]
发表于 2024-10-24 17:48:35 | 显示全部楼层 |阅读模式

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

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

x
在看小甲鱼爬取B站的视频,好早了。有一个元素找不到了,所以也不知道代码该怎么处理,请问有没有知道的,谢谢。
代码如下:
红色代码那里在B站源代码那找不到。
import requests
import bs4
res = requests.get('https://search.bilibili.com/all?keyword=%E7%BC%96%E7%A8%8B&from_source=webtop_search&spm_id_from=333.1007&search_source=5')
if res.status_code == 200:
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    print(soup.prettify())
    <font color="#ff0000">titles = soup.find_all('li', class_ = 'video-item matrix')</font>
    for each in titles:
        if each.a and 'title' in each.a.attrs:
            print(each.a['title'])
        else:
            print('Title not found for an element.')
else:
    print(f'Failed to retrieve page.Status code: {res.status_code}')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-24 17:48:47 | 显示全部楼层
B站可能已经更新了页面的结构和类名,导致代码中的选择器找不到预期的元素。以下是一些步骤和建议来调整你的代码:

1. **检查页面结构**:访问B站搜索页面,使用浏览器开发者工具(F12)检查当前的HTML结构,找到新的视频项类名。

2. **更新类名选择器**:将代码中的`'video-item matrix'`替换为在开发者工具中找到的新类名。例如,如果找到的新类名是`'new-class-name'`,代码调整为:
titles = soup.find_all('li', class_='new-class-name')

3. **检查标签结构是否变化**:确认`each.a`是否仍然是提取标题的正确方法。如果结构变化,需要根据新的结构调整代码。

4. **使用更灵活的选择器**:如果B站改动频繁,可以考虑用更通用的选择方法。例如,使用CSS选择器:
titles = soup.select('li.video-item')

5. **考虑API替代方案**:如果页面结构变化大,考虑使用B站的API进行搜索和数据获取。

确保及时检查B站的使用条款和爬取政策,避免违反其规定。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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