BeautifulSoup条件导出CSV异常:仅检测到WordPress时导出失败
解决WordPress检测CSV导出的条件判断异常问题
看起来你遇到的问题大概率是代码缩进逻辑错误或者文件操作时机不对导致的。咱们先看修正后的代码,再一步步解释问题出在哪:
import requests from bs4 import BeautifulSoup import csv target_url = "https://variety.com/" response = requests.get(target_url) soup = BeautifulSoup(response.text, "lxml") # 检测是否存在WordPress.com标识 find_wordpress = soup.find_all(content="WordPress.com") # 仅在检测到目标内容时执行CSV写入操作 if find_wordpress: with open('try10.csv', mode='w', newline='') as csv_file: fieldnames = ['URL', 'STATUS'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() writer.writerow({'URL': target_url, 'STATUS': "PRESENT"})
问题根源分析:
原代码的文件操作时机错误:
你原来的代码是先打开CSV文件,再做判断。这意味着即使没检测到WordPress,也会创建一个空的CSV文件(因为mode='w'会强制创建/覆盖文件),而且如果if条件的缩进只包裹了部分写入代码(比如只缩进writer.writerow()),会导致writeheader()不管条件都执行,逻辑混乱甚至引发异常。缩进逻辑问题:
当你添加if find_wordpress:后,必须把所有需要在条件满足时执行的代码都缩进在if块内,包括打开文件、写入表头和数据的全部操作。如果缩进不正确,就会出现代码执行顺序错误。
额外优化点:
- 把目标URL单独存为变量,方便后续批量检测时修改;
- 打开CSV文件时添加
newline=''参数,避免Windows系统下写入CSV出现多余空行; soup.find_all(content="WordPress.com")返回的是列表,非空即代表检测到目标内容,if find_wordpress的判断是有效的,也可以用len(find_wordpress) > 0让逻辑更直观。
内容的提问来源于stack exchange,提问作者BS4
相关产品推荐
相关产品推荐

