python爬虫

1.爬虫到底是什么

(1)爬虫是批量化自动获取既有数据
(2)通常来说,都是获取既有数据
(3)也有特殊的:批量注册一些账号、 批量的去领取优惠券、批量下单买商品、自动做任务(签到)

2.爬虫的应用场景

(1)在企业中
①应用最多的,做竞品调研数据采集
②办公自动化,自动从公司的后台等地方,获取数据进行处理
(2) 为个人服务:比如我比较喜欢看小说,而小说网站要收费,可以使用爬虫
(3)盈利:抢票、抢茅台、抢演唱会、自动评论、自动点赞

3.爬虫的四大分类

(1)聚焦爬虫

  • 完成某一项特定数据的采集
  • 百分之九十的爬虫

(2)通用爬虫

  • 就什么内容都采集,都存下来
  • 搜索引擎
    • 百度
    • 谷歌

(3)增量爬虫

  • 既可以使聚焦爬虫
  • 也可以是通用爬虫
  • 当内容发生变化的时候,它可以增量的获取内容

(4)暗网爬虫

  • 深网爬虫
  • 很少见
  • 暗网/深网 本身就是见不得光的地方
  • 暗网爬虫既可以使聚焦爬虫,也可以是通用爬虫,当然也可以是增量爬虫

4.Selenium

Selenium 是一个用于 自动化浏览器操作 的开源工具集,主要用于 Web 应用程序测试 和 网页数据抓取。它支持多种编程语言(如 Python、Java、C#、JavaScript 等),可以模拟用户在浏览器中的操作(如点击、输入、导航等),并获取页面内容进行分析。

4.1 使用Selenium的前置条件

(1)Chrome浏览器
①明确浏览器的版本
在这里插入图片描述

在这里插入图片描述
②电脑中不要安装其他使用了Chrome浏览器开源内核的浏览器。比如:360双擎浏览器、世界之窗。Chrome浏览器存在开源项目,国内的很多的浏览器都号称是双核的。其中的一个核就是基于Chrome浏览器开源项目
③需要使用Python安装Selenium的驱动:pip install selenium
④下载浏览器对应的浏览器版本的驱动:chromedriver,解压后,会有一个chromedriver.exe

4.2 在Python中使用chromedriver.exe时,有几种放置它的方法:

(1)最简单的方法是将 chromedriver.exe 放在你的 Python 项目根目录下(与 .py 文件同级)后直接使用
driver = webdriver.Chrome()
(2)添加到系统 PATH 环境变量
将 chromedriver.exe 放在某个固定目录(如 C:\chromedriver),并将该目录添加到系统的 PATH 环境变量。
这样可以直接调用,无需指定路径:
driver = webdriver.Chrome()
3)指定绝对路径
将chromedriver.exe放在任意位置(如D:\chromedriver.exe),然后在代码中指定绝对路径:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(executable_path='D:/chromedriver.exe')
driver = webdriver.Chrome(service=service)
url = "https://www.xinpianchang.com/"
driver.get(url)
driver.close()

(4)如果在使用 driver = webdriver.Chrome() 时没有指定任何参数(如 executable_path),Selenium 会按照以下顺序自动查找 chromedriver.exe:
①系统 PATH 环境变量
Selenium 会检查系统的 PATH 环境变量中是否包含 chromedriver.exe 的路径。如果已将其所在目录添加到 PATH 中,Selenium 会自动找到它。
②当前工作目录:如果 chromedriver.exe 直接放在你的 Python 脚本的当前工作目录下,Selenium 也能找到它。
③WebDriver 管理的缓存目录(Selenium 4+)
如果你使用的是 Selenium 4 或更高版本,并且安装了 webdriver-manager 库(如通过 pip install webdriver-manager),Selenium 可以自动下载并管理 chromedriver.exe,无需手动指定路径。
示例代码(推荐):

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

4.3 Selenium常用API

(1)浏览器操作

from selenium import webdriver

# 启动浏览器(以 Chrome 为例)
driver = webdriver.Chrome()  

# 常用浏览器操作
driver.get("https://www.example.com")  # 打开网页
driver.refresh()                       # 刷新页面
driver.back()                          # 后退
driver.forward()                       # 前进
driver.title                           # 获取页面标题
driver.current_url                     # 获取当前 URL
driver.close()                         # 关闭当前标签页
driver.quit()                          # 关闭整个浏览器(释放资源)

(2)元素定位(8种方式)

# 通过 ID
element = driver.find_element("id", "element_id")

# 通过 Name
element = driver.find_element("name", "username")

# 通过 Class Name
element = driver.find_element("class name", "class-name")

# 通过 Tag Name
element = driver.find_element("tag name", "div")

# 通过 Link Text(超链接文本)
element = driver.find_element("link text", "点击这里")

# 通过 Partial Link Text(部分超链接文本)
element = driver.find_element("partial link text", "点击")

# 通过 XPath
element = driver.find_element("xpath", "//div[@class='example']")

# 通过 CSS Selector
element = driver.find_element("css selector", "div.example > input")

# 查找多个元素(返回列表)
elements = driver.find_elements("xpath", "//div")

注意:Selenium 4 推荐使用 find_element(By.XX, “value”),需先导入:
from selenium.webdriver.common.by import By
例如:driver.find_element(By.ID, “element_id”)
(3)元素交互

element.click()           # 点击元素
element.send_keys("text") # 输入文本
element.clear()           # 清空输入框
element.text              # 获取元素文本
element.get_attribute("href")  # 获取属性值(如 href)
element.is_displayed()    # 是否可见
element.is_enabled()      # 是否可操作
element.is_selected()     # 是否被选中(复选框/单选框)
element.submit()          # 提交表单

(4) 等待机制
①隐式等待(全局等待)

driver.implicitly_wait(10)  # 最多等待 10 秒(查找元素时)

②显式等待(针对特定元素)

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待元素可见
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "element_id"))
)

# 其他常用条件:
EC.presence_of_element_located()  # 元素存在(不一定可见)
EC.element_to_be_clickable()     # 元素可点击
EC.title_contains("Example")     # 页面标题包含文本

(5)窗口与框架切换

# 切换窗口
driver.switch_to.window(driver.window_handles[1])  # 切换到第二个标签页

# 切换回主窗口
driver.switch_to.window(driver.window_handles[0])

# 切换 iframe
driver.switch_to.frame("iframe_name_or_id")
driver.switch_to.default_content()  # 切回主页面

# 弹窗处理
alert = driver.switch_to.alert      # 获取弹窗对象
alert.accept()                      # 确认
alert.dismiss()                     # 取消

(6)下拉框(Select 类)

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element("id", "dropdown"))
select.select_by_index(1)      # 通过索引
select.select_by_value("val")  # 通过 value 属性
select.select_by_visible_text("Text")  # 通过可见文本

(7)执行JavaScript

# 滚动到元素
element = driver.find_element("id", "footer")
driver.execute_script("arguments[0].scrollIntoView();", element)

# 修改元素属性
driver.execute_script("document.getElementById('id').style.color='red';")

(8)Cookies 操作

driver.get_cookie("cookie_name")  # 获取指定 cookie
driver.get_cookies()              # 获取所有 cookies
driver.add_cookie({"name": "foo", "value": "bar"})  # 添加 cookie
driver.delete_all_cookies()       # 删除所有 cookies

(9)截图与日志

driver.save_screenshot("screen.png")  # 截图保存
# 获取浏览器日志(需配置驱动选项)
logs = driver.get_log("browser")

(10)高级操作(ActionChains)

from selenium.webdriver.common.action_chains import ActionChains

# 鼠标悬停、拖拽等
actions = ActionChains(driver)
actions.move_to_element(element).click().perform()
actions.drag_and_drop(source_element, target_element).perform()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值