You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python提取ul中指定li标签并导出至Excel分栏(漫画站爬取)

漫画网站数据爬取优化方案

问题说明

  • 已使用BeautifulSoup提取目标页面div.album-main下ul.infos里的所有li内容
  • 当前导出的CSV列名为info_1、info_2等序号,需要替换为li对应的类别(如作者、出版社)作为列名
  • 目标网站页面结构存在细微差异,无法使用XPath方法

当前代码

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = 'https://www.bedetheque.com/serie-63733-BD-Champignac.html'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
page = requests.get(url, headers=headers)

soup = BeautifulSoup(page.content, 'html.parser')
lists = soup.find_all('div', class_="album-main")

data = []
for each in lists:
    extra = each.find('ul', {'class':'infos'})
    extra_lists = extra.find_all('li')

    row = {
        'Extra': [x.text.replace('\r', '').replace('\n', '').replace('\xa0', '') for x in extra_lists]
            }

    data.append(row)
        
df1 = pd.DataFrame(data)

df = pd.DataFrame([pd.Series(x) for x in df1.Extra])
df.columns = ['info_{}'.format(x+1) for x in df.columns]

df.to_csv('infos_albums.csv', index=False)

优化方案

核心思路:拆分每个li文本中的类别标签和对应内容,将其整理为键值对存入字典,最终统一生成DataFrame,适配页面结构差异。

优化后代码

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = 'https://www.bedetheque.com/serie-63733-BD-Champignac.html'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
page = requests.get(url, headers=headers)

soup = BeautifulSoup(page.content, 'html.parser')
lists = soup.find_all('div', class_="album-main")

data = []
for each in lists:
    extra = each.find('ul', {'class':'infos'})
    extra_lists = extra.find_all('li')
    
    item_dict = {}
    for li in extra_lists:
        # 清理文本,去除冗余格式符
        clean_text = li.text.replace('\r', '').replace('\n', '').replace('\xa0', '').strip()
        # 拆分类别与内容,仅分割第一个冒号(避免内容含冒号导致错误)
        if ':' in clean_text:
            key, value = clean_text.split(':', 1)
            item_dict[key.strip()] = value.strip()
        else:
            # 处理无冒号的特殊条目,可按需调整逻辑(如跳过或自定义键名)
            item_dict['未知类别'] = clean_text
    
    data.append(item_dict)

# 用字典列表生成DataFrame,自动对齐不同条目列
df = pd.DataFrame(data)
df.to_csv('infos_albums.csv', index=False)

关键细节说明

  1. 键值对拆分:通过split(':', 1)仅拆分第一个冒号,避免内容中包含冒号导致的拆分错误。
  2. 结构适配:即使不同页面的li数量、类别顺序不同,字典列表生成的DataFrame会自动补全缺失值为NaN,保证列名统一。
  3. 异常兼容:针对无冒号的特殊li内容,添加了默认键名处理,可根据实际页面情况调整逻辑(如直接跳过此类条目)。

内容的提问来源于stack exchange,提问作者Benoît DOUCET

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:43