William01 发表于 2024-10-24 17:48:35

爬取B站

在看小甲鱼爬取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}')


FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 爬取B站