You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python脚本无法将爬虫结果写入Excel对应列的技术求助

解决OpenPyXL写入Excel时图片链接错位的问题

嘿,我明白你的困扰了——你现在的脚本把爬取到的图片链接都追加到了Excel表格的末尾,而不是对应电影名的右侧列。问题出在你用了ws.append(data)这个方法,它的作用是在工作表最后添加新行,自然会导致链接和电影名不在同一行。

别担心,只需要改一行核心代码就能解决这个问题,同时我还会给你加一些鲁棒性优化,避免脚本因为意外情况崩溃。

修正后的完整代码

import requests
from bs4 import BeautifulSoup
from openpyxl import load_workbook

wb = load_workbook('item.xlsx')
ws = wb['Sheet1']

for row in range(1, ws.max_row + 1):
    input_val = ws["A" + str(row)].value
    if not input_val:  # 跳过空行,避免白忙活
        continue
    
    response = requests.get("http://www.boxofficemojo.com/search/?", params={'q': input_val})
    soup = BeautifulSoup(response.text, "lxml")
    
    try:
        table = soup.select("table")[1]
        # 取目标行(因为你用了[4:5]切片,只会有一个元素,不用循环)
        target_row = table.select('tr')[4]
        # 提取图片链接
        img_links = [img['src'] for img in target_row.select('td img')]
        
        # 关键修改:直接写入当前行的B列,而不是追加新行
        if img_links:
            ws[f"B{row}"] = img_links[0]
    except IndexError:
        # 万一找不到表格、目标行或者图片,给个提示,别让脚本崩了
        ws[f"B{row}"] = "未获取到图片链接"

wb.save("new_one.xlsx")

为什么原来的代码不行?

你之前用的ws.append(data)是OpenPyXL里用来在工作表末尾添加整行数据的方法,所以每次循环都会把图片链接放到表格最后一行,就出现了你看到的“电影名全在上面,链接全在下面”的情况。

核心修改点

  • 替换追加为直接定位单元格
    ws[f"B{row}"] = img_links[0]代替ws.append(data)f"B{row}"会动态生成当前循环行的B列地址(比如第1行对应B1,第2行对应B2),直接把链接写入到电影名的右侧。
  • 增加异常处理
    加了try-except块,防止因为网页结构变化(比如找不到第2个表格、目标行不存在)导致脚本直接崩溃,同时在B列标注异常提示。
  • 空值检查
    先判断input_val是否为空,跳过空行,避免发送无效的请求。

修改后,你的new_one.xlsx就会完美呈现你想要的格式:

Column A Column B
Shutter Island image_link 1
Black Swan image_link 2
True Grit image_link 3

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

火山引擎 最新活动