python selenium获得数据失败
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
# 访问网站
driver.get('https://www.cbaleague.com/data/#/rank')
time.sleep(5)
# 获取表格
table_element = driver.find_element(By.CSS_SELECTOR, 'div.table-list')
# 获取表格的每一列
cols = table_element.find_elements(By.CSS_SELECTOR, 'div.data-table-column')
# 通过索引分别获得每列数据值(由于是一次性全部爬取,所以连带着把换行符也爬下来了,故用“,”代替也便于后续存储)
name = cols[1].text.replace('\n', ',')[3:] # (因为第一个元素均为表名加逗号共三个字符故从第四个下标3开始)
win = cols[2].text.replace('\n', ',')[3:]
zhuwin = cols[10].text.replace('\n', ',')
kewin = cols[10].text.replace('\n', ',')[3:]
print(win)
print(zhuwin)
同样的格式,为什么前面几列都可以就最后几列爬不到啊
你的错误非常奇怪,但是通过我的调试,我发现你可以用下面的方式来规避问题:
for i in range(len(cols)):
print("column {}:".format(i))
print(cols[i].get_property("innerText"))
只是给你一个处理方式,具体代码还是得你自己来写。
其实我先是在console里用JS调试了下:
document.querySelectorAll("div.table-list .data-table-column")[10].innerText
然后再想到了上面的代码,当然你也可以直接用selenium的execute_script()方法来调用JS代码。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据提供的代码和截图,可以看出最后几列的数据没有被正确地爬取,可能是因为定位元素的方式不正确或者页面还没有完全加载导致的。
首先,可以检查一下定位元素的方式是否正确。代码中使用的是 By.CSS_SELECTOR,可以尝试使用其他的定位方式,如 By.XPATH 或 By.ID 等,看看是否能够正确地定位到元素。
其次,可以尝试增加等待页面加载的时间,确保页面完全加载后再进行元素的定位和数据的获取。可以使用 Selenium 中的 WebDriverWait 方法,等待某个元素出现或某个条件满足后再进行下一步操作。例如:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待表格元素出现
table_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.table-list')))
最后,可以尝试在 Chrome 浏览器中手动打开网站并查看元素的结构,确认需要获取的数据是否位于指定的元素中,并检查元素的定位方式是否正确。
综上所述,可以尝试使用其他的定位方式和增加等待时间来解决无法获取数据的问题,并在 Chrome 浏览器中手动确认元素的结构和定位方式是否正确。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
把 text 改成 get_attribute('innerText')
就行了,我试过了,可能很多文本是 js 自动生成的,获取不到。