我试图使用selenium和beautifulsoup
从这3个网站上删除表:
https://www.erstebank.hr/hr/tecajna-lista
对于所有3个网站,结果是表格的HTML代码,但没有文本
我的代码如下:
import requests
from bs4 import BeautifulSoup
import pyodbc
import datetime
from selenium import webdriver
PATH = r'C:\Users\xxxxxx\AppData\Local\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://www.erstebank.hr/hr/tecajna-lista')
driver.implicitly_wait(10)
soup = BeautifulSoup(driver.page_source, 'lxml')
table = soup.find_all('table')
print(table)
driver.close()
请帮助我,我错过了什么
多谢各位
BeautifulSoup将找不到该表,因为该表从其引用点不存在。在这里,您告诉Selenium,如果它注意到一个元素还没有出现,就暂停Selenium驱动程序匹配程序:
然后,紧接着,您获得当前HTML状态(表仍然不存在),并将其放入BeautifulSoup的解析器中。BS4将无法看到该表,即使它稍后加载,因为它将使用您刚才给它的当前HTML代码:
要解决这个问题,您可以要求Selenium尝试获取HTML表本身。由于Selenium将使用您之前指定的
implicitly_wait
,因此它将等待它存在,然后才允许其余的代码执行持久化。此时,当BS4接收到HTML代码时,表将在那里然而,这有点过分了。是的,您可以使用Selenium来解析HTML,但是您也可以使用
requests
模块(从您的代码中,我看到您已经导入了该模块)直接获取表数据数据是从this端点异步加载的(您可以使用Chrome开发工具自己查找)。您可以将其与
json
模块配对,将其转换为格式良好的字典。这种方法不仅速度更快,而且资源密集度也低得多(Selenium必须打开整个浏览器窗口)网站正在花时间加载
table
中的数据要么应用
time.sleep
或者应用
Explicit wait
,以便将rows
加载到tabel
中相关问题 更多 >
编程相关推荐