Web Scraping导出CSV时第三列Jackpot值缺失问题求助
问题:CSV导出时Jackpot列值缺失,但控制台打印正常
运行下方Python代码后,CSV文件的第三列Jackpot值为空,但控制台能正常打印出Jackpot内容,打印结果如下:
$ 450,000,000
代码示例:
from bs4 import BeautifulSoup import requests import csv source = requests.get('https://www.lotto.net/mega-millions/numbers/2018').text soup = BeautifulSoup(source, 'lxml') jackpots = soup.find_all('div', class_="results-vsmall archive-list") print(jackpots) #next sibling csv_file = open('cms_scrape.csv', 'w') csv_writer = csv.writer(csv_file) csv_writer.writerow(['Date', 'Weekday', 'Jackpot']) for jackpot in jackpots: Weekday = jackpot.find("div", class_="date").span.text print(Weekday) Date = jackpot.find('div', class_ = "date").span.next_sibling print(Date) Jackpot = jackpot.find('div', class_='jackpot').span.text print(Jackpot) csv_writer.writerow([Date, Weekday, Jackpot]) csv_file.close()
原因分析
控制台打印的Jackpot内容包含换行符和多余空格,CSV写入时,换行符会被解析成新行分隔符,导致Jackpot内容被挤到下一行,看起来像是当前行的Jackpot列缺失。
解决方案
对Jackpot变量做字符串清理,去掉多余的换行、空格,合并成完整的金额字符串即可解决问题:
修改后的完整代码
from bs4 import BeautifulSoup import requests import csv source = requests.get('https://www.lotto.net/mega-millions/numbers/2018').text soup = BeautifulSoup(source, 'lxml') jackpots = soup.find_all('div', class_="results-vsmall archive-list") # 添加newline=''避免Windows下CSV出现多余空行 csv_file = open('cms_scrape.csv', 'w', newline='') csv_writer = csv.writer(csv_file) csv_writer.writerow(['Date', 'Weekday', 'Jackpot']) for jackpot in jackpots: Weekday = jackpot.find("div", class_="date").span.text.strip() Date = jackpot.find('div', class_ = "date").span.next_sibling.strip() # 清理Jackpot的换行与空格 jackpot_span = jackpot.find('div', class_='jackpot').span Jackpot = ''.join(jackpot_span.text.split()).strip() csv_writer.writerow([Date, Weekday, Jackpot]) csv_file.close()
关键优化说明
- 使用
split()拆分字符串后再用join()合并,彻底去除所有换行和多余空格 - 打开CSV文件时添加
newline='',避免Windows系统下导出的CSV出现空行 - 对Date和Weekday也做
strip()处理,清理可能存在的冗余空格
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

