使用BeautifulSoup爬取门店营业时间并导出规整Excel的问题求解
解决方案
现有代码的核心问题是直接输出了BeautifulSoup返回的Tag对象列表,没有提取纯文本并做结构化处理,以下是可直接运行的完整代码,实现文本清洗+结构化导出Excel的需求:
import requests from bs4 import BeautifulSoup import xlsxwriter # 请求头配置,避免被网站反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 门店ID,可按需修改或扩展为循环爬取多个门店 store_id = "90460" url = f"https://www.tuodi.it/negozi-dettaglio.cfm?negozio={store_id}" page = requests.get(url, headers=headers) soup = BeautifulSoup(page.content, "html.parser") # 定位营业时间区块 results = soup.find(id="orario" , style="width:50%;float:left") orari_blocks = results.find_all("div", class_="tab", style="width:220px;line-height: 25px") # 结构化存储营业时间 business_hours = [] # 预设星期映射,可根据实际页面展示的星期顺序调整 week_days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] day_index = 0 for block in orari_blocks: # 提取纯文本,自动去除多余空白和标签,用换行分隔不同行的内容 raw_text = block.get_text(strip=True, separator="\n") # 按换行拆分每一天的营业时间,过滤空行 daily_hours = [line.strip() for line in raw_text.split("\n") if line.strip()] for hour in daily_hours: if day_index < len(week_days): business_hours.append({ "星期": week_days[day_index], "营业时间": hour.replace(" ", "") # 去除时间中间的多余空格 }) day_index += 1 # 导出到Excel workbook = xlsxwriter.Workbook(f"门店{store_id}营业时间.xlsx") worksheet = workbook.add_worksheet("营业时间") # 写表头 bold = workbook.add_format({"bold": True}) worksheet.write(0, 0, "星期", bold) worksheet.write(0, 1, "营业时间", bold) # 写内容 for row_num, item in enumerate(business_hours, start=1): worksheet.write(row_num, 0, item["星期"]) worksheet.write(row_num, 1, item["营业时间"]) # 自适应列宽 worksheet.set_column(0, 0, 10) worksheet.set_column(1, 1, 20) workbook.close() print("导出完成")
补充说明
- 如果实际页面的星期顺序和预设不一致,调整
week_days列表的顺序即可匹配页面展示顺序即可 - 如果需要爬取多个门店,把
store_id改成ID列表循环遍历即可批量导出 - 导出的Excel默认自动设置了列宽,格式符合规整排版需求
内容的提问来源于stack exchange,提问作者Szalenstwo21
相关产品推荐
相关产品推荐

