Scrapy爬取含ROWSPAN的表格数据异常问题求助
解决Scrapy爬取带ROWSPAN表格数据的问题
模拟HTML示例(对应你提到的测试文件)
<table> <tr> <th>Family</th> <th>Name</th> <th>Age</th> </tr> <tr> <td rowspan="3">Smith</td> <td>John</td> <td>30</td> </tr> <tr> <td>Jane</td> <td>28</td> </tr> <tr> <td>Tom</td> <td>5</td> </tr> <tr> <td rowspan="2">Brown</td> <td>Mike</td> <td>40</td> </tr> <tr> <td>Lisa</td> <td>35</td> </tr> </table>
修改后的Scrapy代码
核心思路是跟踪当前生效的Family值以及剩余需要填充的行数,解决rowspan覆盖行的空值问题:
import scrapy class TableSpider(scrapy.Spider): name = 'table_spider' # 替换为你的本地HTML文件路径 start_urls = ['file:///Users/xxx/Documents/simulated_table.html'] def parse(self, response): # 获取所有表格行,跳过表头行 rows = response.xpath('//table/tr')[1:] current_family = None remaining_rowspan = 0 for row in rows: # 检查当前行是否有Family列的td family_cell = row.xpath('./td[1]') if family_cell: # 更新当前Family值 current_family = family_cell.xpath('./text()').get().strip() # 读取rowspan属性,默认值为1 rowspan = int(family_cell.xpath('./@rowspan').get() or 1) # 剩余需要填充的行数 = rowspan - 1(当前行已用一次) remaining_rowspan = rowspan - 1 else: # 无Family列,使用缓存值,剩余行数减1 if remaining_rowspan > 0: remaining_rowspan -= 1 # 提取其他列数据 name = row.xpath('./td[last()-1]/text()').get().strip() age = row.xpath('./td[last()]/text()').get().strip() yield { 'Family': current_family, 'Name': name, 'Age': age }
关键逻辑说明
current_family:存储当前需要填充的家庭名称,仅在遇到带rowspan的首行时更新remaining_rowspan:记录该家庭值还需要填充多少行,每处理一个覆盖行就减1,直到归零后等待下一个家庭值- 针对不同结构的表格,可调整
td的索引位置(比如如果列顺序变化,修改td[1]、td[last()-1]等定位)
内容的提问来源于stack exchange,提问作者cptjack345
相关产品推荐
相关产品推荐

