Beautiful Soup解析表格列时去除换行符并提取链接文本的方法
问题原因
你之前的写法直接获取整个td元素的文本内容,会将td下所有子元素的文本连同页面排版生成的换行、制表符、冗余空格全部提取出来,strip()/rstrip()只能清理字符串首尾的空白,无法处理文本中间的连续空白字符,也没法过滤掉无关子元素的空内容。
解决方法
可以先精准定位td内的目标元素再提取文本,同时对提取的文本做全量空白规范化处理,修改后的代码如下:
import re data = [] table = page.find('table', attrs={'class':'table table-no-border table-hover table-striped keyword_result_table'}) table_body = table.find('tbody') rows = table_body.find_all('tr') for row in rows: cols = row.find_all('td') processed_cols = [] for ele in cols: # 针对关键词列,优先提取a标签的文本 a_tag = ele.find('a') if a_tag: raw_text = a_tag.get_text() else: raw_text = ele.get_text() # 把所有连续的空白(换行、制表符、空格)替换成单个空格,再去首尾空 clean_text = re.sub(r'\s+', ' ', raw_text).strip() if clean_text: processed_cols.append(clean_text) data.append(processed_cols)
处理后效果
原来的冗余空白内容会被统一整理为:
['what is in house paint', '5756', '979', '2', 'Great', '89', '.com .net .org']
如果你需要把域名拆成单独的列表项,在清理完空白后用split()方法拆分即可。
内容的提问来源于stack exchange,提问作者Sven Dugojevic
相关产品推荐
相关产品推荐

