You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何增强The Hindu文章爬取脚本实现自动加载更多内容?

增强The Hindu观点栏目爬取脚本实现自动加载更多

核心思路

The Hindu的“SHOW MORE”按钮是动态加载内容的触发点,需要用浏览器自动化工具模拟点击操作替代手动触发。这里选用Selenium,它能直接模拟用户的浏览器交互行为,适配动态渲染的页面。

实现步骤及代码

1. 安装依赖库

先安装所需的Python包:

pip install selenium webdriver-manager

2. 完整增强脚本

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager
import time

def crawl_hindu_opinion(keyword, max_pages=100):
    # 初始化Chrome浏览器
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.maximize_window()
    
    # 构造观点栏目的搜索URL
    search_url = f"https://www.thehindu.com/opinion/search/?q={keyword}"
    driver.get(search_url)
    
    collected_links = set()  # 用集合自动去重
    
    for page_num in range(max_pages):
        try:
            # 等待当前页面文章链接加载完成
            WebDriverWait(driver, 10).until(
                EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a.story-card75x1-text"))
            )
            
            # 提取当前页面所有文章链接
            links = driver.find_elements(By.CSS_SELECTOR, "a.story-card75x1-text")
            for link in links:
                href = link.get_attribute("href")
                if href:
                    collected_links.add(href)
            
            print(f"已爬取第 {page_num+1} 页,累计收集链接 {len(collected_links)} 条")
            
            # 点击"SHOW MORE"按钮(用JS点击避免元素遮挡)
            show_more_btn = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'SHOW MORE')]"))
            )
            driver.execute_script("arguments[0].click();", show_more_btn)
            time.sleep(2)  # 等待内容加载,可根据网络情况调整时长
            
        except TimeoutException:
            print(f"第 {page_num+1} 页加载超时,或已无更多内容")
            break
        except NoSuchElementException:
            print("未找到SHOW MORE按钮,已无更多内容")
            break
    
    # 关闭浏览器并保存结果
    driver.quit()
    with open(f"hindu_opinion_{keyword}_links.txt", "w", encoding="utf-8") as f:
        for link in collected_links:
            f.write(link + "\n")
    
    print(f"爬取完成,共收集 {len(collected_links)} 条链接,已保存到文件")

# 调用示例
if __name__ == "__main__":
    target_keyword = input("请输入要搜索的关键词:")
    crawl_hindu_opinion(target_keyword, max_pages=100)

关键细节说明

  • 去重处理:用集合存储链接,自动过滤重复内容。
  • 智能等待:使用WebDriverWait替代固定延时,确保元素加载完成后再操作,提升脚本稳定性。
  • 异常捕获:处理超时和元素不存在的情况,避免脚本崩溃,同时判断是否已无更多可加载内容。

内容的提问来源于stack exchange,提问作者Anirudh _k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:12:11