selenium简介、使用selenium爬取百度案例、selenium窗口设置、

1 selenium简介
2 使用selenium爬取百度案例
3 selenium窗口设置

1 selenium简介

'''
【一】web自动化
随着互联网的发展,前端技术也在不断变化,数据的加载方式也不再是单纯的服务端渲染了。
现在你可以看到很多网站的数据可能都是通过接口的形式传输的,
或者即使不是接口那也是一些 JSON 的数据,然后经过 JavaScript 渲染得出来的。
这时,如果你还用 requests 来爬取内容,那就不管用了。
因为 requests 爬取下来的只能是服务器端网页的源码,这和浏览器渲染以后的页面内容是不一样的。
因为,真正的数据是经过 JavaScript 执行后,渲染出来的,数据来源可能是 Ajax,也可能是页面里的某些 Data,或者是一些 ifame 页面等。
不过,大多数情况下极有可能是 Ajax 接口获取的。
所以,很多情况我们需要分析 Ajax请求,分析这些接口的调用方式,通过抓包工具或者浏览器的“开发者工具”,找到数据的请求链接,然后再用程序来模拟。
但是,抓包分析流的方式,也存在一定的缺点。
因为有些接口带着加密参数,比如 token、sign 等等,模拟难度较大;
那有没有一种简单粗暴的方法,
这时 Puppeteer、Pyppeteer、Selenium、Splash 等自动化框架出现了。
使用这些框架获取HTML源码,这样我们爬取到的源代码就是JavaScript 渲染以后的真正的网页代码,数据自然就好提取了。
同时,也就绕过分析 Ajax 和一些 JavaScript 逻辑的过程。
这种方式就做到了可见即可爬,难度也不大,同时适合大批量的采集。
【二】Selenium
作为一款知名的Web自动化测试框架,支持大部分主流浏览器,提供了功能丰富的API接口,常常被我们用作爬虫工具来使用。
然而selenium的缺点也很明显
速度太慢
对版本配置要求严苛
最麻烦是经常要更新对应的驱动
selenium最初是一个自动化测试工具,
而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题
selenium本质是通过驱动浏览器,完全模拟浏览器的操作,
比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器
'''
【一】使用selenium需要安装第三方框架包
pip install selenium【二】chorme驱动
http://chromedriver.storage.googleapis.com/index.html?path=114.0.5735.90/
https://googlechromelabs.github.io/chrome-for-testing/#stable
下载并解压 ---> chromedriver.exe# 复制到当前文件夹下from selenium import webdriver
import time# 实例化得到一个 chrome 对象
browser = webdriver.Chrome()# 调用 browser 对象打开网页
browser.get('https://www.baidu.com/')time.sleep(10)# 这里点击代码运行后发现没有调用浏览器并且控制台无反应,夯住了
# 原因是因为 selenium 第一次调用 驱动的时候会很慢

2 使用selenium爬取百度案例

from selenium import webdriver
from selenium.webdriver.common.by import By
from fake_useragent import UserAgentclass BaseBrowser:def __init__(self):self.browser = webdriver.Chrome()self.headers = {'User-Agent': UserAgent().random}class SpiderBaidu(BaseBrowser):def __init__(self):super(SpiderBaidu, self).__init__()self.index_url = 'https://www.baidu.com/'def spider_baidu_index(self):# 1.打开百度首页self.browser.get(self.index_url)# 2.解析页面数据抓取页面数据# 【二】解析页面数据抓取页面数据# 【1】css选择器# find_element :类似于 find 只能招一个标签# self.browser.find_element()# find_elements : find_all 找很多个标签# self.browser.find_elements()# 以前是 tree ---> xpath# soup ---》 css'''find_elements 里面有一个参数 叫 byfrom selenium.webdriver.common.by import By一共有以下几种选择器ID = "id"XPATH = "xpath"LINK_TEXT = "link text"PARTIAL_LINK_TEXT = "partial link text"NAME = "name"TAG_NAME = "tag name"CLASS_NAME = "class name"CSS_SELECTOR = "css selector"'''# li_list = self.browser.find_elements(By.CSS_SELECTOR, '#hotsearch-content-wrapper > li')# print(li_list)# 2)xpath语法li_list = self.browser.find_elements(By.ID, 'hotsearch-content-wrapper')print(li_list)if __name__ == '__main__':s = SpiderBaidu()s.spider_baidu_index()

3 selenium窗口设置


'''注意:把驱动chromedriver.exe放在你的环境变量(python解释器),这样可以直接初始化页面
'''import random# 【一】驱动位置的问题
# 确保你有驱动并且,在当前路径下最好
# 可以放到在系统环境变量中存在的指定的路径下
# 我将驱动添加到了 Python解释器路径下tag_url = 'https://www.baidu.com/'
from selenium import webdriver
import timebrowser = webdriver.Chrome()browser.get(tag_url)def sleep_time():time.sleep(random.randint(1, 3))# 【二】访问页面
# 浏览器对象.get(目标地址) ---> 打开网页
# 浏览器.close() ---> 关闭浏览器窗口# 【三】设置当前浏览器窗口的大小# 设置当前浏览器的窗口
browser.set_window_size(400,400)
# 打开窗口至全屏
browser.maximize_window()# 【四】前进和后退browser.get('https://www.baidu.com')
sleep_time()browser.get('https://www.jd.com/')
sleep_time()# 回退到百度页面
browser.back()
sleep_time()# 回到京东页面
browser.forward()
sleep_time()# 关闭浏览器
browser.close()# 【五】获取当前浏览器的基础属性
browser.get(tag_url)# 网页标题
print(browser.title)
# 百度一下,你就知道# 网页的当前网址
print(browser.current_url)
# https://www.baidu.com/# 当前浏览器的名称
print(browser.name)
# chrome# 查看网页的源码
print(browser.page_source)
# 我正常通过 requests 模块携带 UA 请求过返回的响应的页面源码数据# 【六】切换选项卡
browser.get(tag_url)
sleep_time()# 打印当前浏览器的句柄对象
print(browser.window_handles)
# ['73FE2519DFCC0953B45DC3094C835139']# 控制selenium 在当前窗口打开一个新的窗口
# 执行js代码
browser.execute_script('window.open("https://www.jd.com/")')
sleep_time()# 切换当前窗口至另一个窗口
# 当前浏览器的句柄对象
all_handles = browser.window_handles
print(all_handles)browser.switch_to.window(all_handles[0])
sleep_time()# 再打开新的网页
browser.get('https://pic.netbian.com/')
sleep_time()

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

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

相关文章

python绘图(pandas)

matplotlib绘图 import pandas as pd abs_path rF:\Python\learn\python附件\pythonCsv\data.csv df pd.read_csv(abs_path, encodinggbk) # apply根据多列生成新的一个列的操作,用apply df[new_score] df.apply(lambda x : x.数学 x.语文, axis1)# 最后几行 …

c#word文档:1.创建空白Word文档及保存/2.添加页内容...

---创建空白Word文档 --- (1)创建一个名为OfficeOperator的类库项目。引用操作Word的.NET类库 (2)定义用于操作Word的类WordOperator1。添加引用Microsoft.Office.Interop.Word命名空间。 (3)为WordOper…

Unity | Shader基础知识(第十三集:编写内置着色器阶段总结和表面着色器的补充介绍)

目录 前言 一、表面着色器的补充介绍 二、案例viewDir详解 1.viewDir是什么 2.viewDir的作用 3.使用viewDir写shader 前言 注意观察的小伙伴会发现,这组教程前半部分我们在编写着色器的时候,用的是顶点着色器和片元着色器的组合。 SubShader{CGPRO…

个股期权是什么,个股期权使用方法?

今天期权懂带你了解个股期权是什么,个股期权使用方法?个股期权作为金融市场的重要工具之一,是指投资者在约定时间内有权而非义务以约定价格买卖特定数量的个股的金融衍生品。 个股期权是什么? 个股期权合约是一种由交易所统一设定的标准化合…

git-新增业务代码分支

需求 使用git作为项目管理工具管理项目,我需要有两个分支,一个分支是日常的主分支,会频繁的推送和修改代码并推送另外一个是新的业务代码分支,是一个长期开发的功能,同时这个业务分支需要频繁的拉取主分支的代码&#…

Python_GUI框架 Pyside6的常用部件介绍

PySide6是一个非常完善的商用级别的GUI框架,涉及的知识点相对比较多,今天我先在这里介绍一下我们在实际应用中最常见的几种部件及其功能: 1. QMainWindow QMainWindow 提供了一个主应用程序窗口的框架,通常包含一个菜单栏、工具…

pytest教程-37-钩子函数-pytest_collection_finish

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_collection_start钩子函数的使用方法,本小节我们讲解一下pytest_collection_finish钩子函数的使用方法。 pytest_collection_finish(session) 是一个 pytest 钩子函数&…

03_Redis

文章目录 Redis介绍安装及使用redis的核心配置数据结构常用命令stringlistsethashzset(sortedset) 内存淘汰策略Redis的Java客户端JedisRedisson Redis 介绍 Redis是一个NoSQL数据库。 NoSQL: not only SQL。表示非关系型数据库(不支持SQL标准语法)。 …

Java特性之设计模式【享元模式】

一、享元模式 概述 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式 享元模式尝试重用现有的同类对…

简述前后端分离架构案例

Hello , 这里是小恒不会java 。今晚1点写写关于RESTful接口的使用案例,本文会通过django原生js前后端分离的案例简单讲解。本文带你认识一下简化版的前后端分离架构 代码 本文案例代码在GitHub上 https://github.com/lmliheng/fontend前后端分离 先说说什么是前后…

GateWay检查接口耗时

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency>创建一个LogTimeGateWayFilterFactory类&#xff0c;可以不是这个名字但是后面必须是x…

【高校科研前沿】中国科学院地理资源所钟帅副研究员研究组博士生朱屹东为一作在Top期刊发文:从潜力到利用:探索西藏风能资源开发的技术路径优化布局

01 文章简介 论文名称&#xff1a;From potential to utilization: Exploring the optimal layout with the technical path of wind resource development in Tibet&#xff08;从潜力到利用:探索西藏风能资源开发的技术路径优化布局&#xff09; 文章发表期刊&#xff1a;《…

【Pytorch】2.TensorBoard的运用

什么是TensorBoard 是一个可视化和理解深度爵溪模型的工具。它可以通过显示模型结构、训练过程中的指标和图形化展示训练的效果来帮助用户更好地理解和调试他们的模型 TensorBoard的使用 安装tensorboard环境 在终端使用 conda install tensorboard通过anaconda安装 导入类Sum…

蛋白质/聚合物防污的机器学习(材料基因组计划)

前言&#xff1a;对于采用机器学习去研究聚合物的防污性能&#xff0c;以及或者其他性质。目前根据我的了解我认为最困难的点有三条&#xff1a; 其一&#xff1a;数据&#xff0c;对于将要训练的数据必须要有三点要求&#xff0c;1.数据要多&#xff0c;也就是大数据&#xff…

电子取证平航杯的复现

闻早起部分&#xff1a; 一、闻早起的windows10电脑 &#xff08;1&#xff09;.“闻早起”所使用的笔记本电脑使用何种加密程式&#xff1f; 1.在EFI文件中找到加密程式 &#xff08;2&#xff09; 教徒“闻早起”所使用的笔记本电脑中安装了一款还原软件&#xff0c;其版本…

寻找最佳App分发平台:小猪APP分发脱颖而出

在当今移动应用市场日益饱和的环境下&#xff0c;选择一个合适的App分发平台对于开发者来说至关重要。这不仅关系到应用能否快速触达目标用户&#xff0c;还直接影响到品牌的塑造与市场份额的争夺。本文将深入探讨几大关键因素&#xff0c;帮助开发者判断哪个App分发平台最适合…

Whisper、Voice Engine推出后,训练语音大模型的高质量数据去哪里找?

近期&#xff0c;OpenAI 在语音领域又带给我们惊喜&#xff0c;通过文本输入以及一段 15 秒的音频示例&#xff0c;可以生成既自然又与原声极为接近的语音。值得注意的是&#xff0c;即使是小模型&#xff0c;只需一个 15 秒的样本&#xff0c;也能创造出富有情感且逼真的声音。…

【driver4】锁,错误码,休眠唤醒,中断,虚拟内存,tasklet

文章目录 1.互斥锁和自旋锁选择&#xff1a;自旋锁&#xff08;开销少&#xff09;的自旋时间和被锁住的代码执行时间成正比关系2.linux错误码&#xff1a;64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff&#xff0c;这段地址是被保留的&#xff0c;如果…

全球260多个国家的年通货膨胀率数据集(1960-2021年)

01、数据简介 全球年通货膨胀率是指全球范围内&#xff0c;在一年时间内&#xff0c;物价普遍上涨的比率。这种上涨可能是由于货币过度供应、需求过热、成本上升等原因导致的。通货膨胀率是衡量一个国家或地区经济状况和物价水平的重要指标&#xff0c;通常以消费者价格指数&a…

深度学习之DCGAN

目录 须知 转置卷积 DCGAN 什么是DCGAN 生成器代码 判别器代码 补充知识 LeakyReLU&#xff08;x&#xff09; torch.nn.Dropout torch.nn.Dropout2d DCGAN完整代码 运行结果 图形显示 须知 在讲解DCGAN之前我们首先要了解转置卷积和GAN 关于GAN在这片博客中已经很…