利用 Selenium 和 Python 实现网页新闻链接抓取

在网络数据分析和信息检索中,爬虫是一项非常重要的技术。爬虫可以自动化地从网页中提取信息,极大地提升数据收集的效率。本文将以一个具体的代码实例,讲解如何使用 Selenium 库进行网页新闻链接的抓取。

前期准备

在开始之前,需要确保系统已经安装了 Python 以及 Selenium 库。可以通过以下命令进行安装:

bash 复制代码
pip install selenium

此外,还需要下载适用于浏览器的驱动程序。本文示例中使用的是 Firefox 驱动程序。如果使用的是 Chrome 浏览器,需要下载相应的 Chrome 驱动程序。下载完成后,将驱动程序放在系统的 PATH 路径中。

代码实现

以下是实现从网页中抓取新闻链接的完整代码:

python 复制代码
from selenium import webdriver  
import time

# 此处下载的是Firefox驱动,所以用Firefox()函数打开浏览器,
# 若下载的是Chrome驱动,则利用Chrome()函数打开浏览器
driver = webdriver.Firefox()  
  
# 将提取的新闻链接保存在listhref列表中
listhref = []  
url = "https://www.163.com/search?keyword=中国芯片"  

# 通过分析网页结构可知,网页的所有新闻都存放在"class"="keyword_list"的节点下,
# 右键复制该节点XPath路径,为"/html/body/div[2]/div[2]/div[1]/div[2]",
# 再对某一个新闻进行分析,得到新闻链接存放的节点a的XPath路径,
# 此时不用添加标号,就可以查询到所有满足条件的新闻链接
xpath_name = "/html/body/div[2]/div[2]/div[1]/div[2]/div/h3/a"  
  
# 根据网页链接打开浏览器
driver.get(url=url)  
  
# 这里设计了两个临时变量,分别保存现在滚动条距离页面顶层的高度和上一次滚动条的高度,
# 用来判断是否滚动条已经到达页面底部,无法继续下滑
nowTop = 0  
tempTop = -1  

# 不断向下滚动滚动条并且保存新闻链接
while True:  
  # 保存网页链接存取在的位置节点
  name = driver.find_elements_by_xpath(xpath_name)  
  # 遍历各个节点
  for j in range(len(name)):  
    # 判断当前下标有没有文本  
    if name[j].text:  
      # 有则添加进列表,通过get_attribute函数获得'href'属性的值,获得新闻链接 
      listhref.append(name[j].get_attribute('href'))  
    else:  
      pass  

  # 执行下拉滚动操作
  driver.execute_script("window.scrollBy(0,1000)")  
  # 睡眠让滚动条反应一下
  time.sleep(5)  
	  
  # 获得滚动条距离顶部的距离
  nowTop = driver.execute_script("return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")  
  
  # 如果滚动条距离顶部的距离不再变化,意味着已经到达页面底部,可以退出循环
  if nowTop == tempTop:  
    break  
  tempTop = nowTop  
     
# 完成后关闭浏览器  
driver.close()  

# 检查新闻链接是否保存成功
print(listhref)

代码讲解

1. 初始化浏览器驱动

首先,通过 webdriver.Firefox() 初始化 Firefox 浏览器驱动。如果使用 Chrome 浏览器,可以替换为 webdriver.Chrome()

2. 设置目标 URL 和 XPath

目标 URL 设置为网易新闻的搜索页面,通过关键词"中国芯片"进行搜索。通过分析网页结构,确定新闻链接的 XPath 路径。

3. 打开浏览器并加载网页

使用 driver.get(url) 方法打开目标网页。

4. 滚动页面并提取链接

为了提取所有的新闻链接,需要不断向下滚动页面。通过 driver.execute_script("window.scrollBy(0,1000)") 实现页面滚动,并通过 time.sleep(5) 暂停 5 秒,等待页面加载新内容。

5. 判断是否到达页面底部

利用两个变量 nowToptempTop 判断是否到达页面底部。如果滚动条距离顶部的高度不再变化,说明已经到达页面底部,此时退出循环。

6. 关闭浏览器并输出结果

循环结束后,关闭浏览器,并输出抓取到的新闻链接列表 listhref

注意事项

  1. 浏览器驱动:确保浏览器驱动与浏览器版本匹配,并将驱动程序放在系统的 PATH 路径中。
  2. 页面加载时间 :根据网络环境和页面复杂度,适当调整 time.sleep() 的时间。
  3. 反爬虫机制:一些网站可能有反爬虫机制,如频繁访问可能导致 IP 被封禁。可以通过设置代理、调整访问频率等方式进行规避。

通过本文的实例,可以帮助读者了解如何使用 Selenium 库进行网页数据抓取,并应用于实际的爬虫项目中。希望这篇文章对你有所帮助!

相关推荐
冬天给予的预感1 小时前
DAY 54 Inception网络及其思考
网络·python·深度学习
钢铁男儿1 小时前
PyQt5高级界而控件(容器:装载更多的控件QDockWidget)
数据库·python·qt
亿牛云爬虫专家5 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
蹦蹦跳跳真可爱5899 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij9 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien10 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
敲键盘的小夜猫10 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_122011 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
胖达不服输12 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩12 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp