当前位置: 首页 > news >正文

python爬虫源码:selenium+browsermobproxy实现浏览器请求抓取

前言

        如上篇博客所述:为了抓取所有,通过浏览器F12可以看到的资源(静态资源和接口调用),我使用了selenium+browsermobproxy的方案来处理。

        这是两个模块的安装方案,没有看过的朋友可以去了解一下:

        python爬虫:selenium+browsermobproxy实现浏览器请求抓取(模块安装详解)-CSDN博客

        下面是我编写的一些python代码,可以帮助你尽快入门:

代码

# encoding=utf-8from browsermobproxy import Server
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
import json# 启动BrowserMob Proxy
server = Server(r"E:\其他源码\browsermob-proxy-2.1.4-bin\browsermob-proxy-2.1.4\bin\browsermob-proxy.bat")  # 替换为BrowserMob Proxy的路径
server.start()# 使用网络代理,如果你需要的话
# proxy = server.create_proxy({"httpProxy":"127.0.0.1:7890"})
proxy = server.create_proxy()# 设置Chrome WebDriver
chrome_service = Service(r"E:\其他源码\chromedriver-win64\chromedriver.exe")  # 替换为WebDriver的路径chrome_options = Options()
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))# 解决 您的连接不是私密连接问题
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--ignore-urlfetcher-cert-requests')driver = webdriver.Chrome(service=chrome_service, options=chrome_options)# 设置代理捕获HAR数据
proxy.new_har("comic_order", options={'captureHeaders': True, 'captureContent': True})
# 访问链接A(需要触发POST请求的页面)
driver.get(f"https://xxxxxxxxxxxxxx")  # 替换为实际的初始页面URL# 可能需要等待页面加载
time.sleep(15)  # 可以根据需要调整等待时间# 处理可能的弹出窗口操作,手动或自动化操作,取决于您的具体网站逻辑
# 例如,假设点击某个按钮会弹出窗口
# driver.find_element(By.ID, "your_button_id").click()  # 根据具体情况选择元素并点击# 你可能只需要每次抓取众多响应中的某个接口数据
target_url = 'http://xxxxxxxxxxx'# 获取并分析HAR数据
har_data = proxy.har
for entry in har_data['log']['entries']:req = entry['request']url = req['url']if url == target_url and entry['response']:try:# 获取接口数据result = json.loads(entry['response']['content']['text'])  # 解析为JSON格式print("解析后的JSON内容:", result)# 加入 接下来需要对数据进行处理的操作print('do something?')except json.JSONDecodeError as e:print("解析JSON失败:", e)except Exception as e:print(e)break# 关闭浏览器和代理服务器
driver.quit()
server.stop()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 7- 排序算法
  • 如何本地搭建Whisper语音识别模型
  • netty之ChannelOption
  • 数据库入门: 从 0 到 1 理解数据管理
  • Visual Basic:企业级应用开发的稳健之选
  • Dubbo ZooKeeper Spring Boot整合
  • Java | Leetcode Java题解之第381题O(1)时间插入、删除和获取随机元素-允许重复
  • Java-InputStream、MultipartFile和File相互转换工具类
  • Day50 | 108.冗余连接 109.冗余连接II
  • IO进程day04(进程)
  • Linux之shell脚本的if分支
  • AI搜索“懒人神器”,如何向谷歌和百度发起挑战?
  • 大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
  • P5721 【深基4.例6】数字直角三角形
  • 【uniapp/uview1.x】u-collapse 高度随内容自适应
  • ECS应用管理最佳实践
  • JavaScript函数式编程(一)
  • JAVA并发编程--1.基础概念
  • Java程序员幽默爆笑锦集
  • Java应用性能调优
  • Linux下的乱码问题
  • October CMS - 快速入门 9 Images And Galleries
  • overflow: hidden IE7无效
  • PHP面试之三:MySQL数据库
  • tensorflow学习笔记3——MNIST应用篇
  • Vue.js 移动端适配之 vw 解决方案
  • web标准化(下)
  • 阿里云应用高可用服务公测发布
  • 搭建gitbook 和 访问权限认证
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于 Cirru Editor 存储格式
  • 浏览器缓存机制分析
  • 数组大概知多少
  • 数组的操作
  • 说说动画卡顿的解决方案
  • 微信小程序:实现悬浮返回和分享按钮
  • 我有几个粽子,和一个故事
  • 学习ES6 变量的解构赋值
  • 一个JAVA程序员成长之路分享
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Prometheus VS InfluxDB
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​低代码平台的核心价值与优势
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C++哈希表01)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot 个人网页的网站 毕业设计031623