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

【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)
http://www.lryc.cn/news/353584.html

相关文章:

  • 【JavaScript】文件下载
  • 利用Python去除PDF水印
  • Unity Assembly Definition Dotween 引用
  • 重开之数据结构(二刷)
  • JVM(三)
  • 【二叉树】:LeetCode:100.相同的数(分治)
  • [AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能
  • [7] CUDA之常量内存与纹理内存
  • python使用base加密解密
  • 简述vue.mixin的使用场景和原理
  • C# WPF入门学习(四)—— 按钮控件
  • 大模型效能工具之智能CommitMessage
  • PyQt6--Python桌面开发(33.QToolBar工具栏控件)
  • node环境问题(无法加载文件D:\Software\Node.js\node_global\vue.ps1,因为在此系统上禁止运行脚本。)
  • 位运算算法
  • 重学java 45.多线程 下 总结 定时器_Timer
  • MongoDB(介绍,安装,操作,Springboot整合MonggoDB)
  • 【数字移动通信】期末突击
  • 数据库(5)——DDL 表操作
  • 【Java EE】网络协议——HTTP协议
  • Docker提示某网络不存在如何解决,添加完网络之后如何删除?
  • C++ 红黑树
  • PTA 6-4 配对问题
  • sklearn基础教程
  • MySQL入门学习-查询进阶.别名
  • 【Rust日报】嵌入式 Rust:一份简化指南
  • Web课外练习9
  • rtsp协议分析
  • Spring Web MVC(2)
  • Python-图片旋转360,保存对应图片