如何增强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
相关产品推荐
相关产品推荐

