当前位置: 首页 > news >正文

爬虫获取数据:selenium的应用

当我们在爬取数据时,如:古诗网。有时会出现输出内容不全的情况,针对这种问题如何解决?

个人思路:在遍历网页内容时,如果未发现显示全部内容字样,说明该条数据内容完整,则立即输出。若识别到显示全部内容,则表示内容不全。需要click点击事件,跳转成功后获取该页面中我们主要的数据,例如古诗名、作者、古诗内容等。获取全部数据后返回初始页面,继续寻找显示全部内容。如此循环,直到遍历完成。

此处默认已掌握全部相关知识点,只提供代码。欢迎大家探讨。

import time
import random
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
options = webdriver.EdgeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options = webdriver.EdgeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)# 加载当前浏览器驱动.exe.sh
edgeDriver = Service("../drivera/msedgedriver.exe")# 实例化当前的浏览器对象
browser = webdriver.Edge(service=edgeDriver, options=options)# 设置浏览器超时
wait = WebDriverWait(browser, 10)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
})
# 数据容器
poem_data = []
count = 1url = "https://www.shicimingju.com/chaxun/zuozhe/46.html"
browser.get(url)
time.sleep(2)# 获取所有诗词链接
more_links = browser.find_elements(By.CLASS_NAME, 'more')
total_links = len(more_links)
print(f"第一页找到 {total_links} 个诗词链接")# 循环处理每个链接
for i, link in enumerate(more_links):try:print(f"\n--- 处理第 {count}/{total_links} 个链接 ---")# 滚动并点击链接browser.execute_script("arguments[0].scrollIntoView();", link)time.sleep(1)link.click()time.sleep(2)title = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))).text.strip()author_elem = browser.find_elements(By.CSS_SELECTOR, "div.source, .name")author = "未知作者"if author_elem:author = author_elem[0].text.strip()author = author.split("·")[-1] if "·" in author else author# 提取内容content_elem = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "text")))soup = BeautifulSoup(content_elem.get_attribute('innerHTML'), "html.parser")content = soup.get_text().strip()# 清理内容exclude = ["注释", "赏析", "作品赏析"]content = "\n".join([line for line in content.split("\n") if not any(x in line for x in exclude)])# 保存数据poem_data.append({"序号": count,"标题": title,"作者": author,"内容": content})print("=" * 50)print(f"【{title}】 - {author} \n{content}")count += 1# 返回上一页browser.back()time.sleep(1)finally:pass
#
# # 保存到Excel
# if poem_data:
#     pd.DataFrame(poem_data).to_excel("陆游诗词_简化版.xlsx", index=False)
#     print(f"\n成功保存 {len(poem_data)} 条数据")
#
# browser.quit()

相关文章:

  • Docker简单介绍与使用以及下载对应镜像(项目前置)
  • CVE-2024-6387漏洞、CVE-2025-26465漏洞、CVE-2025-26466漏洞 一口气全解决
  • 【JS-4.3-鼠标常用事件】深入理解DOM鼠标事件:全面指南与最佳实践
  • FPGA四十年创新:因仿真加速而生,AI加速而盛!
  • 股票账户的管理和交易
  • 车载电子电器架构 --- 法律和标准对电子电气架构的影响
  • Mac电脑-Markdown编辑器-Typora
  • 数据库part3---表关联、索引、视图
  • 深入浅出:Go语言中的Cookie、Session和Token认证机制
  • Vibe Coding - 进阶 Cursor Rules
  • gRPC 框架面试题精选及参考答案
  • C++模板基础
  • Python实现MySQL建表语句转换成Clickhouse SQL
  • OpenAI与微软的未来合作之路:充满挑战的AI竞赛与共赢
  • [Github]GitHub 2FA快速安全配置全攻略
  • 前端登录不掉线!Vue + Node.js 双 Token 无感刷新方案
  • RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • day11——Java面向对象高级:多态、抽象类与接口深度解析
  • 5.2 Qt Creator 使用FFmpeg库
  • 权威的合肥网站建设/自动点击器软件
  • html制作网站的步骤/东莞网站建设推广技巧
  • 关于门户网站建设的请示/今天重大新闻事件
  • 学做网站论坛vip账户/seo技术是干什么的
  • 做微信视频的网站/简述网站制作的步骤
  • 建设网站的好处有哪些/新闻稿范文300字