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

在这里插入图片描述

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

前期准备

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

pip install selenium

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

代码实现

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

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 库进行网页数据抓取,并应用于实际的爬虫项目中。希望这篇文章对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/789013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++报错已解决】Invalid Conversion from ‘const char*’ to ‘char*’

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言 ❓ 一、问题描述 👩‍🔬1.1 报错示例 🏆1.2 报错分析 📚1.3 解决…

Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce

章节内容 上节我们完成了: Sqoop 介绍Sqoop 下载配置环境等Sqoop 环境依赖:Hadoop、Hive、JDBC 等环境补全 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机…

项目实战--Spring Boot + GraphQL实现实时数据推送

背景 用户体验不断提升而3对实时数据的需求日益增长,传统的数据获取方式无法满足实时数据的即时性和个性化需求。 GraphQL作为新兴的API查询语言,提供更加灵活、高效的数据获取方案。结合Spring Boot作为后端框架,利用GraphQL实现实时数据推…

金蝶部署常见问题解决

金蝶部署常见问题解决 金蝶版本: Apusic Application Server Enterprise Edition 9.0 SP8 kbc build 202312041121 报错信息: 与金蝶官方人员沟通,发现lib包版本太低,升级后可正常使用。替换lib包后重启服务。 下载lib: 链接: …

Nacos 配置管理模型 -- 命名空间(Namespace)、配置分组(Group)和配置集ID(Data ID)

前言: 我们都知道 Nacos 既可以做注册中心,也可以做配置中心,本篇我们简单分享一下 Nacos 配置中心的几个重要概念,以及他们之间的关系,来帮助我们更深入的理解运用 Nacos 配置中心。 Nacos 系列文章传送门&#xff…

如何通过文件分发系统,实现能源电力企业文件的安全分发流转?

随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率&…

Leetcode刷题——7 滑动窗口 双指针

注&#xff1a;以下代码均为c 1. 两数之和2&#xff08;输入有序数组&#xff09; // 法1&#xff1a;暴力 vector<int> twoSum1(vector<int>& numbers, int target) {vector<int> ans(2);int n numbers.size();for(int i 0; i < n-1; i){if(i ! 0…

JAVA之开发神器——IntelliJ IDEA的下载与安装

一、IDEA是什么&#xff1f; IEAD是JetBrains公司开发的专用于java开发的一款集成开发环境。由于其功能强大且符合人体工程学&#xff08;就是更懂你&#xff09;的优点&#xff0c;深受java开发人员的喜爱。目前在java开发工具中占比3/4。如果你要走java开发方向&#xff0c;那…

C++ 帕斯卡三角形(Pascal’s Triangle)

帕斯卡三角形是二项式系数的三角形阵列。编写一个函数&#xff0c;以整数值N作为输入&#xff0c;并打印帕斯卡三角形的前N​​行。 例子&#xff1a; 下图显示了 N6 的帕斯卡三角形 使用二项式系数的帕斯卡三角形&#xff1a; 每行的条目数等于行号。例如&#xff…

基因检测3 - 遗传性耳聋

1. 耳聋简介 在每1000个新生儿中有1-3个耳聋患儿&#xff0c;绝大部分为遗传学耳聋。遗传性耳聋疾病的遗传方式包括常染色体隐性遗传、常染色体显性遗传、线粒体遗传以及伴性遗传。 根据遗传性耳聋除听力损失外是否存在其他表型&#xff0c;将耳聋分为综合征型耳聋 &#xff…

网页视频提取在线工具

在互联网的海洋中&#xff0c;我们时常会遇到一些令人心动的视频&#xff0c;想要将其下载到本地&#xff0c;以便随时观看。然而&#xff0c;网页视频下载对于很多人来说&#xff0c;似乎是个复杂的过程。别担心&#xff0c;今天我就为大家带来一份详尽的网页视频下载教程&…

79 单词搜索

题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或…

捷配PCB 6个PCB板材关键参数解读技巧

PCB板材是指覆铜基板&#xff0c;是制造电路板的最主要材料。 板材的一些关键性能参数对电路板的生产加工、元器件贴装焊接、电子产品的功能实现以及产品的使用环境或寿命等都将产生一定程度的影响&#xff0c;所以掌握板材的关键参数在实际应用中非常有必要。 PCB板材的关键性…

数据融合工具(5)面中心线提取

这是一个重磅工具&#xff0c;建议先看视频。 提取中心线 一、需求背景 说真的&#xff0c;当小编第一次使用ArcGIS中的Polygon To Centerline工具提取面要素中心线时&#xff0c;激动得无以言表&#xff0c;毕竟&#xff0c;以前要提取面中心线&#xff0c;是一件非常麻烦的事…

完美解决ImportError: cannot import name ‘idnadata‘的正确解决方法,亲测有效!!!

完美解决ImportError: cannot import name idnadata’的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决ImportError: cannot import name idnadata的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01;报错问题…

python parser.add_argument

7->prefix_chars&#xff1a;前缀可选参数的字符集(默认值:’ - ) import argparseparser argparse.ArgumentParser(descriptionTesting...) #创建对象parser.add_argument(test,typeint) ##添加单个命令参数 parser.add_argument(test_1,typefloat) ##type是输入的指定类型…

为什么要安装HTTPS证书?

安装HTTPS证书对于确保网站数据的安全性、增强用户信任度、提升品牌形象和优化搜索引擎排名至关重要。在互联网时代&#xff0c;信息传输的安全性和隐私保护已成为公众和企业最为关注的问题之一。HTTPS证书的引入&#xff0c;正是为了解决这些问题&#xff0c;为网站和用户提供…

MySQL之基本查询(上)-表的增删查改

目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…

Greenplum(三)【分布式事务和两阶段提交协议】

1、事务实现原理和 WAL&#xff08;单机&#xff09; 属性含义数据库系统实现Atomic&#xff08;原子性&#xff09;事务中的操作要么全部正确执行&#xff0c;要么完全不执行&#xff08;要么成功、要么失败&#xff09;Write Ahead Logging 预写日志&#xff0c;分布式事务&…

Canvas:掌握图像变换合成与裁剪状态像素操作

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…