爬虫入门 Selenium使用

爬虫入门 & Selenium使用

特别声明📢:本教程只用于教学,大家在使用爬虫过程中需要遵守相关法律法规,否则后果自负!!!

  • 项目代码:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/python-demo/spider-demo/selenium

爬虫入门

概念

爬虫通俗点就是,我们通过代码的方式向浏览器发送请求获取我们想要的数据。因为整个互联网像是一个巨大的网,我们像是蜘蛛在网上面搜索我们要的东西,所以又叫爬虫。

流程:

  1. 我们通过向服务器发送请求
  2. 服务器响应网页数据(html+css+js等)
  3. 我们通过特定语言定位我们想要的数据(xpath、jsonpath、bs4等)
  4. 解析出数据,下载保存到数据库,或导出为报表

详细文档:https://blog.csdn.net/weixin_45565886/article/details/129544034

元素定位:xpath

既然我们要从服务器响应的数据中定位📌并获取数据,就不得不使用特定语言,这里介绍比较主流的xpath。

插件安装:xpath helper

建议大家在浏览器安装xpath插件,这样我们可以一边看网页,一边写xpath,更方便定位元素位置,提升效率。

链接: https://pan.baidu.com/s/1CqYfYzoNvjUadT3hpE0ewA 提取码: 4w34

  1. 将插件进行解压,在访达里面直接双击就解压了
    在这里插入图片描述

  2. 打开谷歌浏览器,选择右上方三个小点,找到更多工具,找到扩展程序点击进去(不同版本,可能有区别。如果更多工具处没找到扩展程序,点击设置按钮进入页面)
    在这里插入图片描述

  3. 打开右上角的开发者模式

  4. 将解压好的插件包拖进来就OK,注意:跟Windows不同的是这个就是一个文件夹,名为xpath,将这一整个文件夹拖进去

  5. 将xpath插件选择启用就完成了,如果浏览器上还是没有出现xpath插件,将插件重新加载就OK

  6. 打开网页->xpath在mac上的打开与关闭的快捷键为:command + shift + x。也可以直接点击插件进行启用
    在这里插入图片描述

语法

语法详情:
https://www.w3school.com.cn/xpath/xpath_syntax.asp
https://www.runoob.com/xpath/xpath-tutorial.html

xpath基本语法: 
1.路径查询 
//:查找所有子孙节点,不考虑层级关系 
/ :找直接子节点 
2.谓词查询 
//div[@id] 
//div[@id="maincontent"] 
3.属性查询 
//@class 
4.模糊查询 
//div[contains(@id, "he")]
//div[starts‐with(@id, "he")] 
5.内容查询 
//div/h1/text() 
6.逻辑运算 
//div[@id="head" and @class="s_down"]
//title | //price

案例:定位百度搜索按钮

  1. F12或option+command+i 打开开发者工具查看源码
    在这里插入图片描述
  2. 发现百度一下按钮在input标签下,且id=su。那么对应的xpath就为://input[@id="su"]
    代表从html页面根开始查找其input标签且id=su的子孙元素
  • 如果想拿到百度一下这四个字://input[@id="su"]/@value在这里插入图片描述> 3. 转换为对应python代码
# 安装依赖:pip install lxml
import urllib.request
from lxml import etreeurl = "http://www.baidu.com"
response = urllib.request.urlopen(url)
content = response.read().decode('utf-8')
web_html = etree.HTML(content)# 使用XPath选择器找到id为"su"的<input>元素,并获取其"value"属性值
result = web_html.xpath('//input[@id="su"]/@value')print(result)

项目实战

Selenium:模拟用户操作浏览器

概念

web应用程序测试工具,模拟用户操作浏览器

Selenium是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。

环境搭建
  1. 安装Google驱动

安装Google驱动(打开谷歌浏览器,设置-关于-查看对应Google版本),然后进入下面网址下载
https://googlechromelabs.github.io/chrome-for-testing/#stable

  • 选择对应版本(chrome driver驱动版本+chrome驱动对应架构)
    在这里插入图片描述
  1. 安装selenium
pip install selenium
项目实战

01_selenium_demo.py:

from selenium import webdriver
from selenium.webdriver.common.by import By# 设置驱动路径、创建浏览器对象
browser = webdriver.Chrome('/Users/ziyi/GolandProjects/ziyifast-code_instruction/python-demo/spider-demo/selenium/chromedriver')browser.get("https://www.baidu.com")import time
time.sleep(2)
# 获取文本框对象
input = browser.find_element(By.ID,"kw")
# 输入curry
input.send_keys('curry')
# 休眠2s观察效果
time.sleep(2)
# 获取百度一下按钮
search_button = browser.find_element(By.ID,'su')
# 点击按钮
search_button.click()
time.sleep(2)
# 滑动浏览器页面
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)
time.sleep(2)
# 获取下一页按钮
next = browser.find_element(By.XPATH,'//a[@class="n"]')
# 点击下一页
next.click()
# 回到上一页面
browser.back()
time.sleep(1)
# 前进一个页面
browser.forward()
time.sleep(2)
# 退出浏览器
browser.quit()

如果运行项目出现告警:NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with ‘LibreSSL 2.8.3’
解决:pip install urllib3==1.26.15

运行效果:浏览器自动打开并进行操作
在这里插入图片描述

Selenium+PhantomJS:无需打开浏览器即可完成数据爬取,效率更快

概念

PhantomJS 是一个无头浏览器,它提供了一个可编程的JavaScript API,允许开发者在没有用户界面的情况下执行浏览器相关的操作。由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多。

环境搭建

下载地址:https://phantomjs.org/download.html

# 需要注意最新版的selenium不支持phantomjs
# 如果要使用phantomjs,需要安装之前版本2.48.0
pip uninstall selenium 
pip install selenium==2.48.0
项目实战

selenium/02_phantomjs_demo.py:

# phantomJs: 无页面浏览器,支持页面元素查找、js执行;由于不支持css和gui渲染,运行效率比真实浏览器快很多
# Selenium: 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
# Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。
# 但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 Phantomjs 的工具代替真实的浏览器。
from selenium import webdriver
browser = webdriver.PhantomJS("/Users/ziyi/GolandProjects/ziyifast-code_instruction/python-demo/spider-demo/selenium/phantomjs")
browser.get("http://www.baidu.com")
# 拍快照,证明成功访问了百度
browser.save_screenshot("baidu.png")

Selenium+chrome headless:chrome新版原生支持无界面运行

概念

随着Chrome59版本推出Headless模式(无界面模式)以来,越来越多人采用Selenium+Headless Chrome模式
selenium+headless VS selenium+phantomjs

  • Headless Chrome加载速度比PhantomJS快55%
  • Headless Chrome消耗内存比PhantomJS少38%
    数据来源:https://hackernoon.com/benchmark-headless-chrome-vs-phantomjs-e7f44c6956c
环境搭建

Chrome

  • Unix\Linux 系统需要 chrome >= 59
  • Windows 系统需要 chrome >= 60 Python3.6
    • Selenium==3.4.*
    • ChromeDriver==2.31
项目实战

03_chrome_headless_demo.py:

# 随着Chrome59版本推出Headless模式(无界面模式)以来,越来越多人采用Selenium+Headless Chrome模式,实现自动化测试+爬虫。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://www.baidu.com')

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

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

相关文章

828华为云征文 | 解锁高效项目管理,Zentao在华为云Flexusx容器化部署与应用指南

前言 在当今快速迭代的商业环境中&#xff0c;高效且灵活的项目管理成为企业竞争力的关键。华为云Flexusx实例&#xff0c;以其灵活的vCPU内存配比、热变配功能及按需计费模式&#xff0c;为项目管理软件如Zentao的部署提供了理想平台。Flexusx实例采用按需计费的灵活定价模式&…

IDEA 高版本创建 Spring Boot 项目选不到 java 8

一、场景分析 现在高版本的 IDEA&#xff0c;创建 Spring Boot 项目时常常会选不到 Java 8&#xff1a; 直接使用 Java 17 新建项目&#xff0c;又会报错&#xff1a; Selected version of Java 17 is not supported by the project SDK 1.8. Either choose a lower version o…

Go Mail设置指南:如何提升发送邮件效率?

Go Mail使用技巧与配置教程&#xff1f;如何用Go Mail实现发信&#xff1f; 随着工作负载的增加&#xff0c;如何高效地发送和管理邮件成为了许多职场人士面临的挑战。AokSend将为您提供一份详细的Go Mail设置指南&#xff0c;帮助您提升发送邮件的效率&#xff0c;让您的邮件…

数据结构与算法——Java实现 24.中缀表达式转后缀

目录 中缀表达式转后缀表达式 引言 思路 代码 正因为我有能力跨越&#xff0c;考验才会降临 —— 24.9.28 中缀表达式转后缀表达式 引言 Java中的编译器会将我们编写代码中的中缀表达式转化为后缀表达式&#xff0c;然后编译好输出程序 思路 遍历中缀表达式&#xff0c;如果遇…

C++学习9.28

1> 创建一个新项目&#xff0c;将默认提供的程序都注释上意义 por QT core gui #QT表示引入的类库 core:核心库例如IO操作在该库中 gui:图形化显示库 #如果要使用其他类库中的相关函数&#xff0c;就需要调用相关类库后&#xff0c;才能加以使用greaterThan(Q…

Postgresql源码(136)syscache/relcache 缓存及失效机制

相关 《Postgresql源码&#xff08;45&#xff09;SysCache内存结构与搜索流程分析》 0 总结速查 syscache&#xff1a;缓存系统表的行。通用数据结构&#xff0c;可以缓存一切数据&#xff08;hash dlist&#xff09;。可以分别缓存单行和多行查询。 syscache使用CatCache数…

SpringBoot3.X配置OAuth

背景 之前在学习OAuth2时&#xff0c;我就有一个疑惑&#xff0c;OAuth2中有太多的配置、服务类都标注了Deprecated&#xff0c;如下&#xff1a; 显然这些写法已经过时了&#xff0c;那么官方推荐的最新写法是什么样的呢&#xff1f;当时我没有深究这些&#xff0c;我以为我放…

Ansible-template模块动态生成特定文件

文章目录 一、Jinja2介绍什么是主要特性安装基本用法进阶特性总结 Jinja2与Ansible关系1. 模板引擎2. Ansible 的依赖3. 变量和模板4. 动态生成配置5. 社区和生态系统总结 二、Ansible如何使用Jinja2使用template模块Jinja2文件中使用判断和循环Jinja2文件中使用判断语法 Jinja…

onload_tcpdump命令抓包报错Onload stack [7,] already has tcpdump process

最近碰到Onload 不支持同时运行多个 tcpdump 进程的报错&#xff0c;实际上使用了ps查询当时系统中并没有tcpdump相关进程存在。需要重启服务器本机使用onload加速的相关进程后才能使用onload_tcpdump正常抓包&#xff0c;很奇怪&#xff0c;之前确实没遇到这样的问题&#xff…

C++友元和运算符重载

目录 一. 友元 friend 1.1 概念 1.2 友元函数 1.3 友元类 1.4 友元成员函数 二. 运算符重载 2.1 概念 2.2成员函数运算符重载 2.3 成员函数运算符重载 2.4 特殊运算符重载 2.4.1 赋值运算符重载 2.4.2 类型转换运算符重载 2.5 注意事项 三、std::string 字符串类…

MyBatis-Plus分页查询

在实际开发中&#xff0c;对于大量数据的查询&#xff0c;可以通过分页查询的方式来减少查询量和提高查询效率。在 MyBatis-Plus 中&#xff0c;分页查询可以通过使用 Page 对象和 IService 接口提供的分页方法来实现。MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供…

基于Spring框架的分层解耦详解

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Java Web 三层架构&#xff1a; Java Web可以大致被分为三层架构&#xff1a;…

Win11 安装 PostgreSQL 数据库,两种方式详细步骤

文章目录 一、exe文件安装 &#xff08;推荐&#xff09;下载安装包1. 选择操作系统2. 跳转到EDB&#xff08;PostgreSQL 的安装包托管在 EDB上&#xff09;3. 选择版本点击下载按钮 安装1. 管理员打开安装包2. 选择安装目录3. 勾选安装项4. 设置数据存储目录5. 设置管理员密码…

【C++报错已解决】std::ios_base::floatfield

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

YOLOv8改进,YOLOv8主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…

如何用ChatGPT制作一款手机游戏应用

有没有想过自己做一款手机游戏&#xff0c;并生成apk手机应用呢&#xff1f;有了人工智能&#xff0c;这一切就成为可能。今天&#xff0c;我们就使用ChatGPT来创建一个简单的井字棋游戏&#xff08;Tic-Tac-Toe&#xff09;&#xff0c;其实这个过程非常轻松且高效。 通过Cha…

从哪里下载高清解压视频素材?推荐五个优质素材资源网站

想制作吸引人的抖音小说推文&#xff0c;但不知道从哪里获取高清解压视频素材&#xff1f;今天就为大家推荐五个优秀的网站&#xff0c;帮助你轻松找到所需的素材&#xff0c;提升你的创作质量。 首先是蛙学网 作为国内顶级的短视频素材网站&#xff0c;蛙学网提供了丰富的4K高…

浅谈java异常[Exception]

一&#xff0e; 异常的定义 在《java编程思想》中这样定义 异常&#xff1a;阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制&#xff0c;但是要明确一点&#xff0c;决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误&#xf…

SpringBoot使用validation进行自参数校验

一&#xff1a;介绍 在 SpringBoot 项目开发中&#xff0c;很多与数据库交互的参数需要校验数据正确性。很多小伙伴会把参数判断写进代码里&#xff0c;但是这种写法往往会有低可读性以及多处使用的时候&#xff0c;需要变更验证规则时&#xff0c;不易于维护等缺点。今天给大家…

Java之多态

文章目录 1. 多态1.1 多态的概念 2. 方法的重写3. 向上转型3.13.2 发生向上转型的时机 4. 动态绑定和静态绑定5. 什么是多态5.15.2 多态的优缺点 6. 避免在构造方法中调用重写的方法7. 向下转型![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fd1fa83140d94f37ab3b88…