我正在创建一个网络抓取API,它将抓取我所在大学的食堂网站,并根据一天中的时间提取目前提供的食物。目前,网页抓取器不仅在餐厅页面上工作。
其他动态网站,如果禁用JavaScript,内容就不会加载,可以使用当前代码(我使用了一个我一直在使用React开发的前端应用程序)。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
url = 'https://music-bridge.lucagiannotti.com/'
driver = webdriver.Chrome(service=ChromeService(
ChromeDriverManager().install()))
driver.get(url)
elements = driver.find_elements(By.CLASS_NAME, 'container')
for title in elements:
print(title.text)
这段代码确实产生了类下的所有元素
container
.
然而,如果我刮擦餐厅页面,无论我上什么课,它都不会打印任何内容。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
url = 'https://dineoncampus.com/tamu/whats-on-the-menu'
driver = webdriver.Chrome(service=ChromeService(
ChromeDriverManager().install()))
driver.get(url)
print(driver.page_source)
# select elements by class name
elements = driver.find_elements(By.CLASS_NAME, 'table')
for title in elements:
print(title.text)
我认为这可能是页面加载的问题,但在测试了这段代码后,这也不是问题所在。加载整个页面,所有内容都可见,但
table
类永远找不到。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = 'https://dineoncampus.com/tamu/whats-on-the-menu'
driver = webdriver.Chrome(service=ChromeService(
ChromeDriverManager().install()))
driver.get(url)
wait = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.ID, "table"))
)
# print(driver.page_source)
# select elements by class name
elements = driver.find_elements(By.CLASS_NAME, 'table')
for title in elements:
print(title.text)
我确信这与页面加载JavaScript的方式有关,但我并不确切知道问题是什么,也没有通过谷歌搜索找到任何解决方案。