Python爬取多关键词文章导出Excel时数据被覆盖问题求助
解决Python爬虫Excel数据被覆盖的问题
问题原因分析
你遇到的核心问题是每次处理一个关键词时,都重新创建了Excel工作簿并覆盖保存:在article_fetch函数内部,每次调用都会生成新的xlwt.Workbook(),然后直接保存为同一个文件名。这就导致前三个关键词的数据都被最后一个关键词的结果覆盖,最终只保留了最后一组数据。
另外还有个小细节:keyword.replace("+", " ")这行代码其实没生效,因为Python字符串是不可变的,需要重新赋值给keyword才会生效(不过你的关键词里没有+,暂时不影响功能)。
修复后的完整代码
我们调整一下逻辑:把Excel工作簿的创建和保存放到循环外面,让article_fetch只负责爬取数据,然后统一写入同一个工作表。这样所有关键词的数据都会被保留:
import requests from bs4 import BeautifulSoup import datetime import xlwt from xlwt import Formula today = datetime.date.today().strftime("%Y%m%d") keywords = ('PNC', 'Huntington', 'KeyCorp', 'Fifth Third') headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'} def article_fetch(keyword): url = 'https://www.americanbanker.com/search?query={}'.format(keyword) r = requests.get(url, headers=headers) soup = BeautifulSoup(r.text, 'html.parser') data_rows = [] # 只爬取数据行,表头在外面统一写入 for articles in soup.find_all("div", "feed-item"): article = articles.find("h4").text.strip() timestamp = articles.find("span", "timestamp").text.strip() article_url = 'https://{}'.format(articles.find("a")["href"][2:]) link = 'HYPERLINK("{}", "Link" )'.format(article_url) item = [keyword, article, Formula(link), timestamp] data_rows.append(item) return data_rows # 初始化工作簿和工作表 book = xlwt.Workbook() sheet = book.add_sheet("Articles") # 写入表头 cols = ["KeyWord", "Article", "URL", "Publication Date"] for j, col in enumerate(cols): sheet.write(0, j, col) # 记录当前写入的行号,从第1行开始(表头是第0行) current_row = 1 for keyword in keywords: # 如果需要处理关键词里的+,可以加上这行 # keyword = keyword.replace("+", " ") rows = article_fetch(keyword) # 遍历每个数据行,写入工作表 for row in rows: for j, col in enumerate(row): sheet.write(current_row, j, col) current_row += 1 # 最后统一保存工作簿 book.save("C:\\Python\\American Banker\\American Banker {}.xls".format(today)) print('Workbook Saved')
改动说明
- 把工作簿的创建和保存移到了循环外部,确保所有数据都写入同一个文件
- 修改
article_fetch函数,让它返回爬取到的所有数据行(不包含表头) - 用
current_row变量跟踪当前写入的行位置,避免不同关键词的数据互相覆盖 - 表头只在最开始写入一次,避免重复
这样运行后,Excel文件里就会包含四个关键词的所有爬取结果啦!
内容的提问来源于stack exchange,提问作者RRUDARY




