Selenium+Chrome Driver 爬取搜狐页面信息

news2025/4/4 9:23:06

进行selenium包和chromedriver驱动的安装

安装selenium包

在命令行或者anaconda prompt 中输入 pip install Selenium

安装 chromedriver

先查看chrome浏览器的版本
在这里插入图片描述
在这里插入图片描述
这里是 123.0.6312.106
然后在http://npm.taobao.org/mirrors/chromedriver/或者https://googlechromelabs.github.io/chrome-for-testing/
中下载对应版本的chromediver
由于没有106版的这里下的是105版
在这里插入图片描述
下载解压后
把exe文件复制到chrome浏览器的安装目录和
python的安装目录scripts文件夹下 或者 放到Anaconda的scripts文件夹下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.sohu.com/')

自动打开搜狐页面即可
自动打开

注: 浏览器自动更新后,chromediver 也需要重新下载,并按以上路径配置

Selenium+Chrome Driver 爬取搜狐页面信息

在selenium中不同的版本,语法的用法具有差异
按照书上的用chromedriver访问搜狐页面代码报错如下
在这里插入图片描述
chrome_driver_path传给webdriver.Chrome()时方式不对
可参考下面这位博主的语法进行修改
http://t.csdnimg.cn/xxGhp

from selenium.webdriver.chrome.service import Service

# 设置 ChromeDriver 的路径
chrome_driver_path = 'F:/chromedriver/chromedriver-win64/chromedriver.exe'

# 创建 Chrome WebDriver
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service)

代码实现

导入包
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

from selenium import webdriver:
导入了Selenium库中的webdriver模块,它包含了各种WebDriver的实现,用于模拟不同的浏览器行为。

from selenium.webdriver.chrome.service import Service:
导入了Service类,它用于配置和启动ChromeDriver服务。

from selenium.webdriver.chrome.options import Options:
导入了Options类,它用于配置Chrome浏览器的选项,例如设置浏览器的头less模式等。

from selenium.webdriver.common.by import By:
导入了By类,它定义了一些用于查找元素的方法,例如通过class name、id等。

配置ChromeDriver 的路径并启动浏览器
# 设置 ChromeDriver 的路径
chrome_driver_path = 'F:/chromedriver/chromedriver-win64/chromedriver.exe'

# 创建 Chrome WebDriver

# # 创建 Chrome Options 对象
# chrome_options = Options()
# chrome_options.add_argument('--headless')  # 无头模式,即不显示浏览器窗口

service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service)

# 打开搜狐网站
driver.get("https://www.sohu.com/")
获取当前页面的Html源码
# 获取当前网页的 HTML 源码
html_source = driver.page_source
print("HTML 源码:")
print(html_source)
运行结果如图所示

运行结果

获取当前页面的URL
# 获取当前网页的 URL
current_url = driver.current_url
print("\n当前网页的 URL:")
print(current_url)
运行结果如图所示

运行结果

获取classname为‘txt’的页面元素

在这里插入图片描述
在这里插入图片描述

# 使用 find_elements 方法查找 class 属性为 'txt' 的元素
txt_elements = driver.find_elements(By.CLASS_NAME, "txt")

# 遍历输出每个元素的文本内容
for element in txt_elements:
    print(element.text)
运行结果如图所示

运行结果

获取 标签 属性为 ‘footer’ 的元素文本
# 使用 find_elements 方法查找 标签 属性为 'footer' 的元素
txt_elements = driver.find_elements(By.TAG_NAME, "footer")

# 遍历输出每个元素的文本内容
for element in txt_elements:
    print(element.text)
运行结果如下图所示

运行结果

获取 class 属性为 ‘titleStyle’ 的元素的文本及href链接
# 使用 find_elements 方法查找 class 属性为 'titleStyle' 的元素
title_elements = driver.find_elements(By.CLASS_NAME, "titleStyle")

# 遍历输出每个元素的文本内容
for element in title_elements:
    text = element.text
    href = element.get_attribute("href")
    print(f"Text: {text}, Href: {href}")
运行结果如下图所示

在这里插入图片描述

获取 xpath 搜狐首页的导航栏标签 及 href链接
# 使用 find_elements 方法查找 xpath 搜狐首页的导航栏标签 
title_elements = driver.find_elements(By.XPATH, "/html/body/div[2]/div/nav[@class='nav area']//a")

# 遍历输出每个元素的文本内容
for element in title_elements:
    text = element.get_attribute("innerHTML").strip()
    if text:
        href = element.get_attribute("href")
        print(f"Text: {text}, Href: {href}")
运行结果如下图示

在这里插入图片描述
这里运行出来后大的标签会有<strong></strong>
可以通过正则表达式进行优化

优化代码如下
import re

# 使用 find_elements 方法查找 xpath 搜狐首页的导航栏标签 
title_elements = driver.find_elements(By.XPATH, "/html/body/div[2]/div/nav[@class='nav area']//a")

# 遍历输出每个元素的文本内容
for element in title_elements:
    inner_html = element.get_attribute("innerHTML")
    text = re.sub(r'<[^>]*>', '', inner_html).strip()
    if text:
        href = element.get_attribute("href")
        print(f"Text: {text}, Href: {href}")

<:匹配左尖括号,表示 HTML 标签的开始。
[^>]:匹配除了右尖括号之外的任何字符。
*:匹配前面的字符零次或多次,即匹配任意数量的除右尖括号之外的字符。 >:匹配右尖括号,表示 HTML 标签的结束。

re.sub(pattern, repl, string)
pattern:要匹配的正则表达式模式。
repl:用于替换匹配文本的字符串。
string:要进行替换操作的原始字符串。

运行结果如下图所示

运行结果

关闭 WebDriver
# 关闭 WebDriver
driver.quit()

完整代码

import re
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

# 设置 ChromeDriver 的路径
chrome_driver_path = 'F:/chromedriver/chromedriver-win64/chromedriver.exe'

# 创建 Chrome WebDriver

# # 创建 Chrome Options 对象
# chrome_options = Options()
# chrome_options.add_argument('--headless')  # 无头模式,即不显示浏览器窗口

service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service)

# 打开搜狐网站
driver.get("https://www.sohu.com/")

# 获取当前网页的 HTML 源码
html_source = driver.page_source
print("HTML 源码:")
print(html_source)

# 获取当前网页的 URL
current_url = driver.current_url
print("\n当前网页的 URL:")
print(current_url)

# 使用 find_elements 方法查找 class 属性为 'txt' 的元素
txt_elements = driver.find_elements(By.CLASS_NAME, "txt")

# 遍历输出每个元素的文本内容
for element in txt_elements:
    print(element.text)

# 使用 find_elements 方法查找 标签 属性为 'footer' 的元素
txt_elements = driver.find_elements(By.TAG_NAME, "footer")

# 遍历输出每个元素的文本内容
for element in txt_elements:
    print(element.text)

# 使用 find_elements 方法查找 class 属性为 'titleStyle' 的元素
title_elements = driver.find_elements(By.CLASS_NAME, "titleStyle")

# 遍历输出每个元素的文本内容
for element in title_elements:
    text = element.text
    href = element.get_attribute("href")
    print(f"Text: {text}, Href: {href}")


# # 使用 find_elements 方法查找 xpath 搜狐首页的导航栏标签 
# title_elements = driver.find_elements(By.XPATH, "/html/body/div[2]/div/nav[@class='nav area']//a")

# # 遍历输出每个元素的文本内容
# for element in title_elements:
#     text = element.get_attribute("innerHTML").strip()
#     if text:
#         href = element.get_attribute("href")
#         print(f"Text: {text}, Href: {href}")


# 使用 find_elements 方法查找 xpath 搜狐首页的导航栏标签 
title_elements = driver.find_elements(By.XPATH, "/html/body/div[2]/div/nav[@class='nav area']//a")

# 遍历输出每个元素的文本内容
for element in title_elements:
    inner_html = element.get_attribute("innerHTML")
    text = re.sub(r'<[^>]*>', '', inner_html).strip()
    if text:
        href = element.get_attribute("href")
        print(f"Text: {text}, Href: {href}")

# 关闭 WebDriver
driver.quit()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

位图/矢量图/GIF/PNG/JPEG/WEBP一网打尽

❝ 想把一件事做好&#xff0c;那就先把眼前的小事攻克 ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。 前言 最近&#xff0c;在做项目资源打包优化。如果大家做过类似的工作&#xff0c;在操作过程中&#xff0c;想必有一个…

实战:gcc-11.4.0编译wxWidgets-2.8.12的xrc演示例程

由于我上次编译安装的wxWidgets-2.8.12的abi是1009的&#xff0c;现在编译xrc演示程序也要使用09的abi才能正常运行。 到sourceforge去下载wxGTK-2.8.12&#xff0c;然后解压。 上述的文件夹中有msvc的make, 有watcom的makefile, 还有 unx 的makefile, 在mint-21.3上就用unx这…

配置VM开机自启动

1. 在此电脑-右键选择“管理”-服务和应用程序-服务中找到VMware Workstation Server服务&#xff08;新版名称也可能是VMware自启动服务&#xff0c;自己找一下&#xff0c;服务属性里有描述信息的&#xff09;&#xff0c;将其启用并选择开机自动启动 新版参考官方文档&…

抖音变现项目有哪些?来这几个资源网站看看吧

做短视频就像是在做一道菜&#xff0c;你得有那么几个秘密武器&#xff0c;才能让你的作品从众多视频中脱颖而出。我这个视频剪辑界的“烹饪大师”&#xff0c;今天就来给大家分享一下我的厨房秘籍——那些让我视频大放异彩的素材网站。九才素材网&#xff1a; 说起九才素材网…

吴恩达深度学习笔记:深层神经网络(Deep Neural Networks)4.1-4.4

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第四周&#xff1a;深层神经网络(Deep Neural Networks)4.1 深层神经网络&#xff08;Deep L-layer neural network&#xff09;4.2 前向传播和反向传播&#xff08;Forward and backward pro…

3dmax渲染十几个小时怎么办?3dmax怎么多机渲染

当使用3ds Max进行渲染作业时&#xff0c;如果发现单张图像的渲染时间长达十数小时&#xff0c;这可能是由于计算机硬件配置较低或渲染场景过于复杂所致。为了缩短渲染时间并提高效率&#xff0c;我们可以考虑采用多台计算机进行协同渲染。下面&#xff0c;让我们一起探讨如何通…

Webots常用的执行器(Python版)

文章目录 1. RotationalMotor2. LinearMotor3. Brake4. Propeller5. Pen6. LED 1. RotationalMotor # -*- coding: utf-8 -*- """motor_controller controller."""from controller import Robot# 实例化机器人 robot Robot()# 获取基本仿真步长…

【编译原理】Antlr 入门使用

前面文章我们学习了编译器前端的词法和语法分析工具&#xff0c;本篇我们来看看如何借助 Antlr 工具&#xff0c;快速生成词法和语法分析代码。 一、安装 mac 环境&#xff1a; 1&#xff09;安装 brew install antlr2&#xff09;配置 classpath &#xff08;把 Antlr 的 J…

MySQL -- 07_最流行的查询需求分析(一些分组排序查询、开窗函数 dense_rank、distinct 去重函数 等~)

目录 最流行的查询需求分析07演示数据准备的SQL需求演示36、查询每一门课程成绩都在70分以上的姓名、课程名称和分数group by min() in() 函数 37、查询不及格的课程及学生普通表连接查询 38、查询课程编号为01语文且课程成绩在80分以上的学生的学号和姓名普通表连接查询 39、…

使用axios进行前后端数据传输

最近在和朋友合作写一个新的项目&#xff0c;前后端进行了分离&#xff0c;既然是分离的&#xff0c;肯定需要交互&#xff0c;今天这篇文章详细介绍一下数据交互的一种常见方式&#xff1a;使用axios,希望对大家有所帮助。 前端&#xff1a;以LoginPage.vue登录页面为例&…

扬帆出海扩规模,仍是比亚迪未来的发展关键?

又到了新能源车企公布阶段性成果的时期。 日前&#xff0c;乘联会预估2024年3月全国新能源乘用车厂商批发销量82万辆&#xff0c;同比增长33%&#xff0c;环比增长84%。其中&#xff0c;比亚迪继续领跑&#xff0c;3月销量超30万辆&#xff0c;环比增长147.8%&#xff0c;而这…

OpenHarmony实战:瑞芯微RK3566移植案例(上)

本文章是基于瑞芯微RK3566芯片的khdvk_3566b开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c;WIFI&#xff0c;BT&#xff0c;vib…

中科院发布大模型想象增强法IAG,无需外部资源,想想就能变强

在人工智能领域&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;的子领域——问答系统&#xff08;QA&#xff09;中&#xff0c;知识的获取和利用一直是推动技术进步的核心问题。近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;在各种任务中展现出了惊人…

【C语言】扫雷【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、扫雷游戏规则 尽快找到雷区中的所有不是地雷的格子,而不许踩到地雷。点开的数字是几&#xff0c;则说明该数字旁边的8个位置中有几个雷&#xff0c;如果挖开的是地雷&#xff0c;则会输掉游戏。 二、代码思路&…

Laravel 项目如何运行

如有一个 Laravel 项目&#xff0c;在配置好 PHP 版本和运行环境后&#xff0c;可以直接在项目下直接运行&#xff1a; php artisan serve 来启动你的项目。 通过浏览器查看 当项目运行后&#xff0c;默认的启动端口为 8000&#xff0c;可以通过浏览器来进行查看运行的 Larav…

C++性能测试工具

使用示例main.cpp // g-13 -O3 -stdc17 main.cpp profile.cpp #include <iostream> #include <chrono> #include <stdint.h> #include <mutex> // std::mutex#include "profile.h" #include "profile_rdtsc.h"std::mut…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点&#xff0c;注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习&#xff0c;建议阅读 P3. Python学习中的两大法宝函数&#xff08;当然也可以用在PyTorch&#xff09;_哔哩哔哩_bilibili 二.简述…

Scala中如何使用Jsoup库处理HTML文档?

在当今互联网时代&#xff0c;数据是互联网应用程序的核心。对于开发者来说&#xff0c;获取并处理数据是日常工作中的重要一环。本文将介绍如何利用Scala中强大的Jsoup库进行网络请求和HTML解析&#xff0c;从而实现爬取京东网站的数据&#xff0c;让我们一起来探索吧&#xf…

云智慧发布对象关系型数据库CloudPanguDB,打破传统技术壁垒

近日&#xff0c;云智慧推出关系型数据库CloudPanguDB&#xff08;中文名称&#xff1a;盘古数据库&#xff09;&#xff0c;旨在通过高兼容性能和创新技术架构&#xff0c;降低企业项目整体运营成本。 无论是处理海量复杂数据&#xff0c;还是构建清晰有序的数据结构关系&…