Selenium循环抓取网页表格丢失首行及最后一列问题求助
问题原因分析
- 最后一列(净投放(亿))缺失:列遍历用了
range(1,c),Python的range是左闭右开区间,只会生成1到c-1的整数,刚好跳过了索引为c的最后一列,需要调整为range(1, c+1)。 - 首行(2021-11对应行)缺失:你取行数据时用了全局路径
//tr["+str(i)+"],会把表头thead里的tr也算入索引统计,第一个数据行的全局tr索引不是1而是2,和你统计的tbody下的tr索引错位。同时行遍历用了range(1,r),同样因为左闭右开规则漏掉了索引为r的最后一行,需要调整为range(1, r+1),同时限定路径为tbody下的tr,避免索引错位。 - 额外逻辑问题:row数组初始化和element追加操作放在了行循环外部,会导致所有行的数据都堆叠到同一个数组中,无法按行分组。
修正后代码
from selenium import webdriver driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver') driver.get('http://www.chinamoney.com.cn/chinese/hb/') rws = driver.find_elements_by_xpath("//table/tbody/tr") r = len(rws) cols = driver.find_elements_by_xpath("//thead/tr/td") c = len(cols) element = [] for i in range(1, r+1): row = [] for j in range(1, c+1): # 限定在tbody下查找,避免索引错位 d=driver.find_element_by_xpath("//table/tbody/tr["+str(i)+"]/td["+str(j)+"]").text row.append(d) element.append(row) driver.close() print(element)
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

