Python嵌套循环未遍历列表全部元素问题排查求助
问题
用Python嵌套循环结合Selenium爬取sahibinden.com房源信息时,无法遍历列表全部元素,换成while循环也没用。一开始以为没拿到所有帖子,后来怀疑是嵌套循环的问题,但找不到具体原因。加了print(e)后得到一堆无符号错误栈,相关代码和错误信息如下:
城市配置代码
city= { "adana": ["aladag"]}
主爬取代码
for j in city: for k in city[j]: for i in range(0,100,20): driver.get("https://www.sahibinden.com/satilik-daire/"+j+"-"+k+"?pagingOffset={0}".format(i)) item_titles = driver.find_elements(By.XPATH,'//*[@id="searchResultsTable"]/tbody/tr[*]/td[2]/a[1]') for link in item_titles: try: link.click() item_title = driver.find_elements(By.XPATH,'//*[@id="classifiedDetail"]/div/div[1]/h1') item_prices = driver.find_elements(By.XPATH,'//*[@id="classifiedDetail"]/div/div[2]/div[2]/h3') item_neighbour = driver.find_elements(By.XPATH,'//*[@id="classifiedDetail"]/div/div[2]/div[2]/h2/a[3]') item_date = driver.find_elements(By.XPATH,'//*[@id="classifiedDetail"]/div/div[2]/div[2]/ul/li[2]/span') item_m = driver.find_elements(By.XPATH,'//*[@id="classifiedDetail"]/div/div[2]/div[2]/ul/li[5]/span') for title in item_title: if title !="": titles_list.append(title.text) for prices in item_prices: if prices !="": prices_list.append(prices.text) for neighbour in item_neighbour: if neighbour !="": neighbourhood_list.append(neighbour.text) for dat in item_date: if dat !="": date_list.append(dat.text) for m in item_m: if m !="": m_list.append(m.text) driver.execute_script("window.history.go(-1)") except Exception: pass
错误栈信息
(No symbol) [0x00B637D3] (No symbol) [0x00AF8B81] (No symbol) [0x009FB36D] (No symbol) [0x009FE0FB] (No symbol) [0x009FDFD0] (No symbol) [0x009FE250] (No symbol) [0x00A2F0C9] (No symbol) [0x00A230ED] (No symbol) [0x00A4B41C] (No symbol) [0x00A22B96] (No symbol) [0x00A4B774] (No symbol) [0x00A61215] (No symbol) [0x00A4B216] (No symbol) [0x00A20D97] (No symbol) [0x00A2253D] GetHandleVerifier [0x00DDABF2+2510930] GetHandleVerifier [0x00E08EC1+2700065] GetHandleVerifier [0x00E0C86C+2714828] GetHandleVerifier [0x00C13480+645344] (No symbol) [0x00B00FD2] (No symbol) [0x00B06C68] (No symbol) [0x00B06D4B] (No symbol) [0x00B10D6B] BaseThreadInitThunk [0x76D27D69+25] RtlInitializeExceptionChain [0x77CDBB9B+107] RtlClearBits [0x77CDBB1F+191]
排查与解决建议
1. 核心问题:元素失效导致循环中断
点击链接返回列表页后,原列表页的DOM已重新渲染,item_titles中的元素会变成失效状态,后续循环操作这些元素时会抛出异常,被except Exception: pass直接吞掉,导致遍历提前终止。
解决方法:提前提取所有房源链接的href属性,再循环打开这些链接,避免操作失效元素:
# 替换原代码中item_titles的循环部分 item_links = [link.get_attribute('href') for link in item_titles] for url in item_links: driver.get(url) # 后续爬取逻辑... driver.back() # 用driver.back()替代window.history.go(-1),更稳定
2. 无符号错误栈的处理
这种错误是ChromeDriver底层崩溃日志,通常因为页面未加载完成就操作元素,或者浏览器进程异常。
- 加显式等待:确保元素加载完成后再操作,避免DOM状态不稳定:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 示例:等待标题元素可见后再获取文本 item_title = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.XPATH, '//*[@id="classifiedDetail"]/div/div[1]/h1')) ) titles_list.append(item_title.text) - 不要吞掉所有异常:修改捕获逻辑,打印具体错误信息,方便定位:
except Exception as e: print(f"处理链接{url}时出错: {str(e)}") driver.save_screenshot(f"error_{i}_{url.split('/')[-1]}.png") # 保存截图辅助调试
3. 其他可能导致遍历不完整的原因
- XPATH定位不准确:原XPATH
//*[@id="searchResultsTable"]/tbody/tr[*]/td[2]/a[1]可能包含非房源行(如广告、分页栏),导致无效元素混入。改成更精准的定位,比如只匹配房源行://*[@id="searchResultsTable"]/tbody/tr[contains(@class, 'searchResultsItem')]/td[2]/a[1] - 分页逻辑错误:
range(0,100,20)假设网站有5页数据,但实际可能没有这么多页,或者分页参数不是pagingOffset。可以先获取分页总数,再动态生成分页范围,避免请求不存在的页面。
内容的提问来源于stack exchange,提问作者Madkhix
相关产品推荐
相关产品推荐

