『python爬虫』24. selenium之无头浏览器-后台静默运行(保姆级图文)

news/2024/7/19 9:52:58 标签: python, 爬虫, selenium

目录

    • 1. 无头浏览器
    • 2. 分析被爬取数据的网页结构
    • 3. 完整代码
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

1. 无头浏览器

  • 一般性的selenium会打开浏览器页面,展示图形化页面给我们看,我们都应该知道命令行式的程序肯定比这种渲染图形化界面的程序快速高效。为了一定程度上缓解selenium慢的问题,我们可以采用无头浏览器。

  • 无头浏览器值。“无头浏览器”的“无头”元素与它们确实缺少一个关键元素(即图形用户界面(GUI))有关。这使得我们可以做到后台的静默运行中完成爬虫

  • 优点:快捷高效

  • 缺点:编写代码和调试更加困难(没有图形化界面的痛苦)

  • 适用场景:已经确保能够成功爬取数据,为了提高效率,可以使用无头浏览器。


2. 分析被爬取数据的网页结构

python">艺恩数据
https://www.endata.com.cn/BoxOffice/BO/Year/index.html
  • 年份下拉框select元素的xpath //*[@id="OptionDate"]定位
    在这里插入图片描述
  • 借助 select支持库将select元素转为select对象
python">sel = Select(sel_el)# 对元素进行包装, 包装成下拉菜单对象
  • 抓取每个年份的数据table xpath定位 //*[@id="TableList"]/table

在这里插入图片描述
i就是每一个下拉框选项的索引位置 把5换成len(sel.options)表示遍历所有年份 这里是5表示最近4年【0,5)

python"># for i in range(len(sel.options)):#所有年份的数据
for i in range(5):#最近【0,5)年的数据 也就是 [2023-2019]
    sel.select_by_index(i)  # 遍历每一年,按照索引进行切换
    time.sleep(2)
    table = web.find_element_by_xpath('//*[@id="TableList"]/table')
    print(table.text)  # 打印所有文本信息
    print("===================================")


3. 完整代码

python">from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.select import Select
import time


# 创建一个参数对象,用来控制chrome以无界面模式打开(可以视为固定写法)
opt = Options()#新建参数对象
opt.add_argument("--headless")#无头
opt.add_argument("--disbale-gpu")#无gpu图形化界面

web = Chrome(options=opt)  # 把参数配置设置到浏览器中

web.get("https://www.endata.com.cn/BoxOffice/BO/Year/index.html")

time.sleep(2)

sel_el = web.find_element_by_xpath('//*[@id="OptionDate"]')# 定位到下拉列表

sel = Select(sel_el)# 对元素进行包装, 包装成下拉菜单对象
# print(sel.options) #打印所有的下拉选项
# 让浏览器进行调整选项
for i in range(5):  # i就是每一个下拉框选项的索引位置  把5换成len(sel.options)表示遍历所有年份 这里是5表示最近4年【0,5)
    sel.select_by_index(i)  # 遍历每一年,按照索引进行切换
    time.sleep(2)
    table = web.find_element_by_xpath('//*[@id="TableList"]/table')
    print(table.text)  # 打印所有文本信息
    print("===================================")

print("运行完毕.  ")


# 拿到页面代码Elements(经过数据加载以及js执行之后的结果的html内容)
print(web.page_source)

web.close()#注意关闭连接,如果不关闭可能会导致有多个连接,进而容易封禁
print("关闭连接")

在这里插入图片描述

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』



http://www.niftyadmin.cn/n/334103.html

相关文章

PAT 乙级 1034 有理数四则运算(解题思路+AC代码)

题目: 本题要求编写程序,计算 2 个有理数的和、差、积、商。 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分…

文件系统挂载

文件系统挂载 问题claude解决 问题 1.414066] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled! /dev/sda3: recovering journal /dev/sda3: clean, 287571/1277952 files, 4720254/5110784 blocks [ 2.553460] systemd[1]: Failed to mount /. host:. [ FAILED…

AI绘画:Midjourney 注册

AI绘画:Midjourney 注册 前提:需要魔法才能使用 第一步:下载Discord 官方网站:https://discord.com/,打开网址,下载您需要的版本。 注意:支持手机端(Android&ios),Windows,Linux,Mac 下面以Windows注册为例<

Golang每日一练(leetDay0069) 数字范围按位与、快乐数

目录 201. 数字范围按位与 Bitwise-and-of-numbers-range &#x1f31f;&#x1f31f; 202. 快乐数 Happy Number &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

<达梦> 《达梦数据库之disql 常用命令》

DIsql 常用命令 1 帮助 HELP2 输出文件 SPOOL3 切换到操作系统命令 HOST4 获取对象结构信息 DESCRIBE5 管理本地变量 DEFINE, COLUMN 和 UNDEFINE5.1 DEFINE5.2 COLUMN5.3 UNDEFINE 6 查看执行计划 EXPLAIN7 设置异常处理方式 WHENEVER8 查看下一个结果集 MORE9 显示 SQL 语句或…

Educational Codeforces Round 148 (Rated for Div. 2) ABC题

这里写目录标题 A. New Palindrome题目描述&#xff08;英文&#xff09;题意思路代码注释 B. Maximum Sum题目题意思路代码注释 C. Contrast Value题目题意思路代码注释 A. New Palindrome 题目描述&#xff08;英文&#xff09; A. New PalindromeA palindrome is a string…

河洛配数——基本卦

1 八卦 第一列数字为洛数,第二列为先天八卦的数 KAN("坎",1,6),KUN("坤",2,8),ZHEN("震",

【NGBoost实战】

NGBoost实战 一级目录二级目录三级目录 ngboost分类实战常用参数介绍基学习器定义定义训练函数 一级目录 二级目录 三级目录 ngboost分类实战 常用参数介绍 n_estimators: 学习器数量learning_rate: 学习率minibatch_frac: 每次迭代的样本比例col_sample: 每次迭代的特征比…