爬虫入门 Selenium使用

news2024/9/28 19:20:19

爬虫入门 & 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 etree

url = "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.coloradmin.cn/o/2174521.html

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

相关文章

systemd-analyze命令:Linux系统启动分析

一、命令简介 用途: systemd-analyze ​命令用于分析系统引导过程的时间性能。标签: 系统管理&#xff0c;性能分析。相关命令: systemd-bootchart​, systemd-cgtop​, systemd-resolve​. ‍ 二、命令参数 命令格式 systemd-analyze [OPTIONS...] COMMAND ...选项和参数…

GUI-Guider LVGL 添加自定义代码

添加自定义代码时&#xff0c;分为上线两端 1.上部分可有可无 2.下部分为你触发事件时调用的语句 具体集合下方图片 示例参考

运放模块的选型参数

增益带宽积-----尤其重要&#xff1a; GWB 增益*带宽 压摆率&#xff1a; 高带宽的运放一般都是电流型运放&#xff1a; 注意压摆率计算公式里面的Vopp参数是放大后的电压最大值&#xff1a; 参数&#xff0c;布局一定参考数据手册&#xff01;&#xff01;&#xff01;&…

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

快速理解使用mq(二)——用户、虚拟HOST、Queue的创建

一、用户的创建 直接添加即可 二、虚拟Host创建 创建完成选择所属用户 点进去新建的host 管理对应权限 三、queue 创建 选择对应host 直接添加即可

系统分析师14:需求工程

1 内容概要 2 需求工程概述 需求工程&#xff1a;需求开发【含需求分析】和需求管理系统分析&#xff1a;软件需求分析、硬件需求分析、网络需求分析软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望考虑“做什么”&#xff0c;而不考虑“怎么做”&#xff0c…

2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点

云计算de小白 投资人工智能&#xff1a;平衡潜力与实用性 到 2025 年&#xff0c;人工智能将成为 IT 支出的重要驱动力&#xff0c;尤其是在生成式人工智能领域。人工智能的前景在于它有可能彻底改变业务流程、增强决策能力并开辟新的收入来源。然而&#xff0c;现实情况更加微…

4款工具搞定PDF去水印,线上+软件一应俱全!

作为一名文员&#xff0c;我每天都得和各种文档打交道&#xff0c;其中PDF文件是最常见的。有时候&#xff0c;我们收到的PDF文件会带有水印&#xff0c;这不仅影响了阅读体验&#xff0c;还可能在分享时造成不便。所以&#xff0c;学会如何去除PDF水印对我来说至关重要。今天&…

力扣 滑动窗口最大值

滑动窗口最大值 题目描述 题目分析 维护一个定长窗口的最大值&#xff0c;每当窗口滑动时都有一个新的元素进入和一个原有的元素离开。 比较简单的方法就是用一个优先队列维护窗口最大值 但是堆的计算成本时最坏时是 O ( n log ⁡ n ) O(n\log n) O(nlogn) 优化&#xff1a;…

uni-app在线预览pdf

这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹&#xff0c;将解压文件放进 pdf 文件…

面试加分必看,11道接口安全测试面试题!

今天&#xff0c;分享一些在面试中可能会遇到的接口安全测试面试问题&#xff0c;助你在面试中从容不迫。 01.HTTPS 与 HTTP 的区别&#xff1f; 02.OSI七层模型是指&#xff1f; 03.你所知道的 HTTP 状态码&#xff1f; 04.你知道SQL注入吗&#xff1f; 05.SQL 注入与XSS…

Xiaojie雷达之路---doa估计(dbf、capon、music算法)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,本篇文章主要是介绍一下雷达信号处理中的dbf、capon、music测角算法,一起来看看吧!!! 前言 本文从信号模型、dbf原理、capon原理、music原理以及代码仿真进行展开描述。 信号模型 阵列接收到…

c++与Python用笛卡尔的心形函数输出爱心

我突然想到输出爱心是否可以用笛卡尔的心形函数 在IDLE里用Python输出下面这个图形 在小熊猫c里用c输出下面这个图形 如果当你要输出这些的时候会怎么办 低级:纯输出 print( ********* ********* ***************** ***************** …

Github + Hexo + Shoka搭建个人博客以及遇到的部分问题

博客预览&#xff1a; 主页&#xff1a; 文章&#xff1a; 博客语言链接&#xff1a; 全部分类 |mmjon 不在能知&#xff0c;乃在能行 Shoka官方博客&#xff1a; Yume Shoka 優萌初華 有夢書架 (lostyu.me) 1、准备 1、github账号 &#xff1a;自行去github官网注册…

人生苦短,我用Python✌

面向代码的解释型语言 数据开发和AI 编程语言:让计算机了解我们干什么&#xff0c;翻译官 1.下载软件 解释器安装 点击第二个 改路径 D:\python 安装 测试 winr打开 输入代码 输出 退出环境 exit&#xff08;&#xff09; 新建文本文档后缀改成py 编写 运行 安装编写代码…

MySQL 性能剖析全攻略

在使用 MySQL 数据库的过程中&#xff0c;性能问题往往是让开发者和管理员头疼的难题。为了有效地解决这些问题&#xff0c;我们需要对 MySQL 进行性能剖析。那么&#xff0c;如何在 MySQL 中进行性能剖析呢&#xff1f;本文将为你详细介绍。 一、为什么要进行性能剖析&#x…

$attrs 与 $listeners 怎么用

在组件 son、grandson 和 great-grandson 中都显示了 this is a sentence&#xff0c;而子组件 son 和孙组件 grandson 中都没有定义 props&#xff0c;说明 parent 组件中的数据正确的传递到了内部组件中。 打开控制台&#xff0c;分别点击组件 grandson 和 great-grandson 中…

用Python实现运筹学——Day 5: 单纯形法介绍

一、学习内容 1. 单纯形法的基本原理与步骤 单纯形法&#xff08;Simplex Method&#xff09;是求解线性规划问题的一种常用方法。它是一种迭代算法&#xff0c;用于在凸多边形的顶点上寻找目标函数的最优解&#xff0c;通常用于多变量的线性规划问题。单纯形法主要应用于线性…

如何查看上网记录及上网时间?5种按步操作的方法分享!【小白也能学会!】

“知己知彼&#xff0c;百战不殆”&#xff0c;在数字时代&#xff0c;了解自己的上网行为和时长&#xff0c;不仅能帮助我们更好地管理时间&#xff0c;还能提升工作效率和生活质量。 今天&#xff0c;我们就来分享五种简单易懂的方法&#xff0c;即便是网络小白也能轻松学会…

大模型分布式训练并行技术(九)-总结

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…