下面是一个使用Selenium来爬取网易新闻的脚本示例,可以处理动态加载的情况:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置Chrome浏览器的驱动路径
driver_path = '/path/to/chromedriver'

# 创建一个Chrome浏览器实例
driver = webdriver.Chrome(driver_path)

# 打开网易新闻的网页
url = 'https://news.163.com/'
driver.get(url)

# 等待页面加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'news_title')))

# 模拟下滑操作加载更多新闻
while True:
    # 下滑到页面底部
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
    
    # 等待新闻加载完成
    wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'news_title')))
    
    # 获取所有新闻标题
    news_titles = driver.find_elements(By.CLASS_NAME, 'news_title')
    
    # 输出新闻标题
    for title in news_titles:
        print(title.text)
    
    # 判断是否有更多新闻需要加载
    try:
        more_button = driver.find_element(By.CLASS_NAME, 'load_more_btn')
        # 点击加载更多按钮
        ActionChains(driver).move_to_element(more_button).click().perform()
    except:
        # 没有更多新闻需要加载,退出循环
        break

# 关闭浏览器
driver.quit()

上述脚本使用了Selenium的WebDriver模块来模拟浏览器操作,通过执行JavaScript代码实现下滑操作,然后等待新闻加载完成,获取新闻标题并输出。当没有更多新闻需要加载时,退出循环并关闭浏览器。


原文地址: https://www.cveoy.top/t/topic/pZb9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录