BeautifulSoup爬取时如何给字典键追加空列表以适配DataFrame生成
解决方案
你初始化字典时已经预先定义了所有需要的字段键且默认值为空列表,只要保证不删除这些键、不对不存在的键赋值,哪怕对应字段完全没有爬取到内容,这些键也会保留空列表,满足后续生成DataFrame的要求。
原有代码存在两个可优化的点,避免异常同时适配需求:
- 没有对爬取到的字段做校验,如果页面出现预设外的字段,会直接触发KeyError导致程序崩溃
- 当前
append([values])的写法会把每个值套一层列表,后续转DataFrame时每个元素都是列表类型,通常直接存字符串更方便处理,可根据自己的需求调整
修改后的代码如下:
# 预设固定字段,初始化默认空列表 dict1 = {"Film Director: ":[], "Film Producer: ":[], "Film cast: ":[]} info = soup2.find("table", class_="something") # 先判断表格是否存在,避免find返回None时报错 if info: for tr in info.find_all("tr"): tds = tr.find_all("td") # 过滤列数不足的不规范行,避免索引越界 if len(tds) < 2: continue columns = tds[0].text values = tds[1].text # 仅处理预设范围内的字段,避免KeyError if columns in dict1: # 不需要嵌套列表就改为 dict1[columns].append(values) dict1[columns].append([values]) # 若需要所有字段的列表长度对齐(比如同个条目下各字段的数量要一致),可添加以下代码 max_length = max(len(val) for val in dict1.values()) for key in dict1: while len(dict1[key]) < max_length: # 按你的格式补空列表,不需要嵌套就补空字符串"" dict1[key].append([])
修改完成后如果某个页面完全没有爬取到Film cast: 对应的行,最终这个键对应的值就是空列表,不会消失,直接传入pandas即可生成标准结构的DataFrame。
内容的提问来源于stack exchange,提问作者Amateur1
相关产品推荐
相关产品推荐

