鱼C论坛

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

爬取B站

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

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

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

x
在看小甲鱼爬取B站的视频,好早了。有一个元素找不到了,所以也不知道代码该怎么处理,请问有没有知道的,谢谢。
代码如下:
红色代码那里在B站源代码那找不到。
  1. import requests
  2. import bs4
  3. 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')
  4. if res.status_code == 200:
  5.     soup = bs4.BeautifulSoup(res.text, 'html.parser')
  6.     print(soup.prettify())
  7.     <font color="#ff0000">titles = soup.find_all('li', class_ = 'video-item matrix')</font>
  8.     for each in titles:
  9.         if each.a and 'title' in each.a.attrs:
  10.             print(each.a['title'])
  11.         else:
  12.             print('Title not found for an element.')
  13. else:
  14.     print(f'Failed to retrieve page.Status code: {res.status_code}')

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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


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

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


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 02:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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