如何用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)
关键细节说明
- 键值对拆分:通过
split(':', 1)仅拆分第一个冒号,避免内容中包含冒号导致的拆分错误。 - 结构适配:即使不同页面的
li数量、类别顺序不同,字典列表生成的DataFrame会自动补全缺失值为NaN,保证列名统一。 - 异常兼容:针对无冒号的特殊
li内容,添加了默认键名处理,可根据实际页面情况调整逻辑(如直接跳过此类条目)。
内容的提问来源于stack exchange,提问作者Benoît DOUCET
相关产品推荐
相关产品推荐

