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

如何从Excel的URL列表提取文章标题与内容并保存为TXT文件?代码排障

问题解决方案

现有代码的问题分析

  • 变量名逻辑错误:列表推导式里,Title = [title.text for name in ...] 循环变量是name,但取文本用的是未定义的title;Description= [Description.text for desc in ...] 把列表名Description当成元素调用,且和循环变量desc混淆,导致无法正确提取内容。
  • 缩进错误:Python依赖缩进区分代码块,原代码中for循环下的print、Save_to_file函数内的代码都没有缩进,逻辑完全不执行。
  • 未调用保存函数:仅定义了Save_to_file但从未执行调用,自然不会生成文件。
  • 元素选择器不匹配:目标ebay页面的商品标题class是s-item__title而非title,描述的class是s-item__subtitle而非description,导致find_all找不到元素,Title和Description为空列表,无输出。
  • 未处理Excel文件:需求是从input.xlsx读取URL,但代码直接写死固定URL,完全未实现核心需求。

完整实现步骤

1. 依赖安装

先安装所需第三方库:

pip install requests beautifulsoup4 openpyxl

2. 满足需求的完整代码

import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook
import os

# 创建输出目录,避免文件散落
save_dir = "article_outputs"
os.makedirs(save_dir, exist_ok=True)

# 读取Excel中的URL和URL_ID(要求Excel第一列为URL_ID,第二列为文章URL,表头在第一行)
wb = load_workbook("input.xlsx")
ws = wb.active

# 遍历Excel行,跳过表头
for row in ws.iter_rows(min_row=2, values_only=True):
    url_id, article_url = row[0], row[1]
    if not article_url:
        continue

    try:
        # 模拟浏览器请求,避免被反爬拦截
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
        }
        response = requests.get(article_url, headers=headers, timeout=10)
        response.raise_for_status()  # 主动抛出请求错误

        soup = BeautifulSoup(response.text, "html.parser")

        # 提取标题(优先找h1标签,可根据目标网站调整选择器)
        title_tag = soup.find("h1")
        title_text = title_tag.get_text(strip=True) if title_tag else "无标题"

        # 移除页眉、页脚、导航等无关元素
        for irrelevant in soup.find_all(["header", "footer", "nav", "aside"]):
            irrelevant.decompose()

        # 提取正文段落(过滤空内容)
        content_paragraphs = []
        for p in soup.find_all("p"):
            p_text = p.get_text(strip=True)
            if p_text:
                content_paragraphs.append(p_text)
        content_text = "\n\n".join(content_paragraphs)

        # 以URL_ID为文件名保存TXT
        file_path = os.path.join(save_dir, f"{url_id}.txt")
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(f"{title_text}\n\n")
            f.write(content_text)
        print(f"已完成:{file_path}")

    except Exception as e:
        print(f"处理URL {article_url} 失败:{str(e)}")

print("所有URL处理完成")

3. 关键注意事项

  • Excel格式要求:input.xlsx需包含两列,第一列是URL_ID,第二列是目标文章URL,表头在第一行。
  • 选择器适配:不同网站的标题、正文结构不同,需打开目标网页的开发者工具,查看对应元素的标签或class,替换代码中的find/find_all参数。
  • 反爬处理:添加User-Agent模拟浏览器请求,避免被网站拦截。

原代码的快速修复(仅爬固定ebay页面)

如果仅需修复原代码的无输出问题,可参考以下修改:

import requests
from bs4 import BeautifulSoup

url = 'https://www.ebay.com/b/Smart-Watches/178893/bn_152365'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
response.raise_for_status()

soup = BeautifulSoup(response.content, 'html.parser')

# 匹配ebay页面实际的元素class
titles = [item.get_text(strip=True) for item in soup.find_all('a', class_='s-item__title')]
descriptions = [item.get_text(strip=True) for item in soup.find_all('span', class_='s-item__subtitle')]

# 修正缩进,避免索引越界
for i in range(min(len(titles), len(descriptions))):
    print(titles[i])
    print(descriptions[i])    
    print()

def save_to_file():
    # 用with语句自动管理文件,修正缩进
    with open('URL_ID.txt', 'w', encoding="utf-8") as f:
        for i in range(min(len(titles), len(descriptions))):
            f.write(titles[i] + "\n")
            f.write(descriptions[i] + "\n")
            f.write("\n")

# 调用保存函数
save_to_file()

内容的提问来源于stack exchange,提问作者Yash Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:40:17