【Python爬虫篇】Selenium在获取网页数据方面的使用及采集中国大学课程评论数据
1 selenium概述
1.什么是selenium?
(1)Selenium是一个用于Web应用程序测试的工具。
(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。
(4)selenium也是支持无界面浏览器操作的。
2.为什么使用selenium?
模拟浏览器功能,自动执行网页中的js代码,实现动态加载
3.如何安装selenium?
(1)操作谷歌浏览器驱动下载地址http://chromedriver.storage.googleapis.com/index.html
(2)谷歌驱动和谷歌浏览器版本之间的映射表http://blog.csdn.net/huilan_same/article/details/51896672
(3)查看谷歌浏览器版本谷歌浏览器右上角‐‐>帮助‐‐>关于
(4)安装selenium4.1.1版本pip install selenium==4.1.0
4.selenium的使用步骤?
(1)导入:from selenium import webdriver
(2)创建谷歌浏览器操作对象:a、如果驱动路径和采集数据的py文件在同一个目录时,创建对象如下:browser = webdriver.Chrome()b、如果驱动路径和采集数据的py文件不在同一个目录时,创建对象如下:path = 谷歌浏览器驱动文件路径browser = webdriver.Chrome(path)
(3)访问网址
url = 要访问的网址
browser.get(url)
5、selenium的元素定位?
元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等。操作这些元素前首先要找到它们,WebDriver提供很多定位元素的方法方法,现以百度网页为例
# 通过 id 定位
driver.find_element_by_id("kw")# 通过name定位:
driver.find_element_by_name("wd")# 通过class name定位:
driver.find_element_by_class_name("s_ipt")# 通过tag name定位:
driver.find_element_by_tag_name("input")# 通过 xpath 定位的几种写法
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
driver.find_element_by_xpath("/html/body/form/span/input")
driver.find_element_by_xpath("//span[@class='soutu-btn']/input")
driver.find_element_by_xpath("//form[@id='form']/span/input")
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']")# 通过 css 定位的几种写法
driver.find_element_by_css_selector("#kw")# 根据选择器进行定位输入框的id属性,id用#,其中#kw表示的是id选择器名称是kw的
driver.find_element_by_css_selector("[name=wd]")
driverr.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("html > body > form > span > input")
driver.find_element_by_css_selector("span.soutu-btn> input#kw")
driver.find_element_by_css_selector("form#form > span > input")# 通过 link_text 定位
driver.find_element_by_link_text("新闻")
driver.find_element_by_link_text("hao123")
driver.find_element_by_partial_link_text("新")
driver.find_element_by_partial_link_text("hao")
driver.find_element_by_partial_link_text("123")# 如果是定位一组元素,用下面
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
2 selenium访问百度网页输入"python"
from selenium import webdriver
import time
url='https://www.baidu.com/'
brower=webdriver.Chrome()
brower.get(url)
#解决闪退方式:time.sleep(20)
time.sleep(10)
brower.find_element_by_id("kw").send_keys('python')
time.sleep(10)
brower.find_element_by_id("su").click()
time.sleep(20)selenium常用配置,模拟用户操作百度网页,将以上代码改为:from selenium import webdriver
import time
#配置
options=webdriver.ChromeOptions()
options.add_experimental_option('detach',True)
#禁止浏览器扩展
options.add_argument('--disable-extensions')#禁止浏览器弹窗
options.add_argument('--disable-popup-blocking')
#创建浏览器对象
diver=webdriver.Chrome(options=options)diver.get('https://www.baidu.com/')
diver.maximize_window()diver.find_element_by_id("kw").send_keys('python')
time.sleep(3)
diver.find_element_by_id("su").click()
time.sleep(5)
3、selenium采集BOSS直聘数据
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
import time
#BOSS直聘
#谷歌内核
def spider(url):driver.get(url)sleep(3)search = driver.find_element(By.XPATH, '//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[2]/p/input')search.send_keys("数据分析师")sleep(2)submit = driver.find_element(By.XPATH, '//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/button')submit.click()print('搜索结束,开始寻找信息')driver.implicitly_wait(5)sleep(3)parser(driver)ye = 2while (ye < 5):print("正在爬去第{}页".format(ye))next_page = driver.find_element_by_class_name("ui-icon-arrow-right")next_page.click()sleep(5)parser(driver)ye = ye + 1def parser(driver):# #lis = driver.find_elements(By.CSS_SELECTOR, '.job-card-wrapper')print('定位完成')for li in lis:jobname = li.find_element(By.CSS_SELECTOR, '.job-name').textinfo_data = li.find_element(By.CSS_SELECTOR, '.job-card-left').get_attribute('href')jobarea = li.find_element(By.CSS_SELECTOR, '.job-area').textslary = li.find_element(By.CSS_SELECTOR, '.salary').textprint('工作名字:' + jobname + ' 工作场所:', jobarea + ' 工资:' + slary + ' 详细链接:' + info_data)print('\n')if __name__ == '__main__':driver=webdriver.Chrome()#调窗口至全屏大小driver.maximize_window()url='https://www.zhipin.com/zhengzhou/?sid=sem_pz_360pc_title'spider(url)
4、selenium采集中国大学MOOC课程信息
4.1单页采集mooc课程评论数据
import requestsurl='https://www.icourse163.org/course/ZJU-200001'
headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4214.3 Safari/537.36"}re=requests.get(url,headers=headers)
re.encoding="utf-8"
response=re.text
print(response)#为了解决以上没有得到源码的问题,使用selenium采集from selenium import webdriver
import timedef spider(url):driver.get(url)driver.implicitly_wait(3)button=driver.find_element_by_id("review-tag-button")button.click()time.sleep(5)paser(driver)def paser(driver):info=driver.find_elements_by_class_name("ux-mooc-comment-course-comment_comment-list_item_body")all=[]name=[]content=[]time_f=[]course_count=[]like_count=[]for i in info:all.append(i.text.split("\n"))for a in all:name.append(a[0])content.append(a[1])time_f.append(a[2])course_count.append(a[3])like_count.append(a[4])all_info=list(zip(name,content,time_f,course_count,like_count))print(all_info)if __name__ == '__main__':driver=webdriver.Chrome()url='https://www.icourse163.org/course/ZJU-200001?from=searchPage&outVendor=zw_mooc_pcssjg_'spider(url)
2、分页采集mooc课程评论数据并保存到csv中
from selenium import webdriver
import time
import csvdef spider(url):driver.get(url)driver.implicitly_wait(3)button=driver.find_element_by_id("review-tag-button")button.click()time.sleep(5)paser(driver)ye=2while(ye<5):print("正在爬去第{}页".format(ye))next_page=driver.find_element_by_class_name("ux-pager_btn__next")next_page.click()time.sleep(5)paser(driver)ye=ye+1def paser(driver):info=driver.find_elements_by_class_name("ux-mooc-comment-course-comment_comment-list_item_body")all=[]name=[]content=[]time_f=[]course_count=[]like_count=[]for i in info:all.append(i.text.split("\n"))for a in all:name.append(a[0])content.append(a[1])time_f.append(a[2])course_count.append(a[3])like_count.append(a[4])all_info=list(zip(name,content,time_f,course_count,like_count))save(all_info)def save(all_info):with open("mooc.csv","a+",newline="",encoding="utf-8") as f:w=csv.writer(f)for row in all_info:w.writerow(row)#分页采集保存到csv中if __name__ == '__main__':with open("mooc.csv","a+",newline="",encoding="utf-8") as f:w=csv.writer(f)w.writerow(["评论者","评论内容","发表时间","开课次数","点赞数"])driver=webdriver.Chrome()url='https://www.icourse163.org/course/ZJU-200001?from=searchPage&outVendor=zw_mooc_pcssjg_'spider(url)
相关文章:
【Python爬虫篇】Selenium在获取网页数据方面的使用及采集中国大学课程评论数据
1 selenium概述 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种driver&#…...

【JavaScript】文件下载
文件下载的消息格式 服务器只要在响应头中加入 Content-Disposition: attachment; filename"kxx" 即可触发浏览器的下载功能其中: attachment 表示附件,浏览器看到此字段,触发下载行为(不同的浏览器下载行为有所区别&…...

利用Python去除PDF水印
摘要 本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印,并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理,并提供一个简单的使用示例。 导言 简介:水印在许多 PDF 文件中都很常见&#x…...

Unity Assembly Definition Dotween 引用
原理: 具体Unity程序集原理用法,暂时留坑,不介绍了,相信有很多人也写过了 这里简单放个官方API链接 https://docs.unity3d.com/cn/current/Manual/ScriptCompilationAssemblyDefinitionFiles.html 现象 :Dotween引用…...

重开之数据结构(二刷)
引言: 由于前段时间学习效率不高,导致后面复习前面数据结构没有一个大纲,因此打算重新来学习以下数据结构,期望再次把数据结构学透,并有深刻的印象.并且记录每一次的学习记录 以便于后续复习 二分查找 需求:在有序数组arr内,查找target值 如果找到返回索引位置如果找不到返回…...

JVM(三)
在上一篇中,介绍了JVM组件中的类加载器,以及相关的双亲委派机制。这一篇主要介绍运行时的数据区域 JVM架构图: JDK1.8后的内存结构: (图片来源:https://github.com/Seazean/JavaNote) 而在运行时数据区域中&#…...

【二叉树】:LeetCode:100.相同的数(分治)
🎁个人主页:我们的五年 🔍系列专栏:初阶初阶结构刷题 🎉欢迎大家点赞👍评论📝收藏⭐文章 1.问题描述: 2.问题分析: 二叉树是区分结构的,即左右子树是不一…...

[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能
VideoFX 是来自 labs.google 的最新实验,您可以查看音乐效果和图像效果的新更新,现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能,以更好地理解这些生成…...

[7] CUDA之常量内存与纹理内存
CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间,可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势,使用常量内存也一定程序上减少了对全局…...

python使用base加密解密
原理 base编码是一种加密解密措施,目前常用的有base16、base32和base64。其大致原理比较简单。 以base64为例,base64加密后共有64中字符。其加密过程是编码后将每3个字节作为一组,这样每组就有3*824位。将每6位作为一个单位进行编码…...
简述vue.mixin的使用场景和原理
Vue.mixin的使用场景 Vue.mixin是Vue的全局混入功能,它提供了一种非常灵活的方式来分发Vue组件中的可复用功能。使用Vue.mixin可以为Vue实例和组件添加全局的方法、属性、钩子函数等。具体的使用场景包括: 全局设置默认属性或方法:例如&…...

C# WPF入门学习(四)—— 按钮控件
上期介绍了WPF的实现架构和原理,之后我们开始来使用WPF来学习各种控件。 一、尝试插入一个按钮(方法一) 1. VS2019 在界面中,点击工具栏中的视图,在下拉菜单中选择工具箱。 至于编译器中的视图怎么舒服怎么来布置&am…...

大模型效能工具之智能CommitMessage
01 背景 随着大型语言模型的迅猛增长,各种模型在各个领域的应用如雨后春笋般迅速涌现。在研发全流程的效能方面,也出现了一系列贯穿全流程的提效和质量工具,比如针对成本较高的Oncall,首先出现了高质量的RAG助手;在开…...

PyQt6--Python桌面开发(33.QToolBar工具栏控件)
QToolBar工具栏控件...

node环境问题(无法加载文件D:\Software\Node.js\node_global\vue.ps1,因为在此系统上禁止运行脚本。)
问题:npm安装lerna显示安装成功,但是lerna -v的时候报错 解决步骤: 1、输入:Get-ExecutionPolicy 2、输入:Set-ExecutionPolicy -Scope CurrentUser(有选项的选Y) 3、输入:RemoteSi…...

位运算算法
位运算是计算机中常用的一种运算方法,它直接对二进制数的位进行操作。位运算主要包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<&a…...

重学java 45.多线程 下 总结 定时器_Timer
人开始反向思考 —— 24.5.26 定时器_Timer 1.概述:定时器 2.构造: Timer() 3.方法: void schedule(TimerTask task, Date firstTime, long period) task:抽象类,是Runnable的实现类 firstTime:从什么时间开始执行 period:每隔多长时间执行一次…...

MongoDB(介绍,安装,操作,Springboot整合MonggoDB)
目录 MongoDB 1 MongoDB介绍 MongoDB简介 MongoDB的特点 MongoDB使用场景 小结 2 MongoDB安装 安装MongoDB 连接MongoDB MongoDB逻辑结构 MongoDB数据类型 小结 3 MongoDB操作 操作库和集合 操作文档-增删改 操作文档-查询 MongoDB索引 小结 4 SpringBoot整合…...
【数字移动通信】期末突击
文章目录 复习题一.简答题1、常用的移动通信系统有哪些?2、分别列出1G,2G,3G,4G的典型系统或标准?3、移动通信信道的基本特征?4、电波传播预测模型是用来计算什么量的,在选择传播预测模型时,主要考虑哪些因素?5、什么…...

数据库(5)——DDL 表操作
表查询 先要进入到某一个数据库中才可使用这些指令。 SHOW TABLES; 可查询当前数据库中所有的表。 表创建 CREATE TABLE 表名( 字段1 类型 [COMMENT 字段1注释] ...... 字段n 类型 [COMMENT 字段n注释] )[COMMENT 表注释]; 例如,在student数据库里创建一张studen…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...