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

server/2025/1/12 13:27:10/

前言

        如上篇博客所述:为了抓取所有,通过浏览器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()


http://www.ppmy.cn/server/105250.html

相关文章

Docker 启动单机版ES

官方安装教程:https://www.elastic.co/guide/en/elasticsearch/reference/8.14/docker.html#_linux 调整vm.max_map_count CentOS 7.9中,默认的vm.max_map_count值是65536。这个值表示一个进程可以拥有的虚拟内存区域(VMA, Virtual Memory …

基于单片机的仿生水母水下机器人设计

摘 要 : 文章对水母喷水推进的运动方式进行建模 , 设计了仿生水母的机械结构 , 并重点设计了基于单片机的控制系统, 完成了基于单片机的仿生水母水下机器人的设计 , 具有一定的应用价值 。 关键词 : 单片机…

Git 远程操作

1. 理解分布式版本控制系统 我们所说的⼯作区,暂存区,版本库等,都是在本地!也就是在笔记本或计算机上。⽽我们的 Git 其实是分布式版本控制系统.可以简单理解为,我们每个⼈的电脑上都是⼀个完整的版本库,这…

Swift中的数据守护者:Core Data全解析

标题:Swift中的数据守护者:Core Data全解析 在Swift语言的iOS开发中,数据持久化是一个核心议题,而Core Data则是Apple提供的一个强大而灵活的解决方案。它不仅可以处理本地数据存储,还可以与远程数据源同步。本文将深…

Leetcode-day31-01背包问题

46. 携带研究材料 1.dp数组代表的是什么? 这里的dp数组是一个二维数组,dp[i][j]是从前i个物品中任选放入容量j内的最大价值。 2.递推公式。 不放物品i:由dp[i - 1][j]推出,即背包容量为j,里面不放物品i的最大价值&am…

RocketMQ 如何保证消息不丢失?

RocketMQ 的消息想要确保不丢失,需要生产者、消费者以及 Broker 的共同努力,缺一不可。 生产者(Producer) 1、发送方式:选择同步发送 同步发送:发送消息后,需要阻塞等待 Broker 确认收到消息…

(七)Flink Watermark

Flink 的 Watermark 是用来标识数据流中的一个时间点。Watermark 的设计是为了解决乱序数据处理的问题,尤其是涉及到多个分区的 Kafka 消费者时。在 Watermark 的作用下,即使某些数据出现了延迟到达的情况,也不会导致整个处理流程的中断。此外,Watermark 还能防止过期的数据…

C++学习, 变量作用域

从广义上看,有三个地方,可以声明变量: 在函数或块中声明的变量,为局部变量。 在函数参数定义的变量,为形式参数。 在所有函数之外的变量,为全局变量。 局部变量 (Local Variables) 在函数或块内声明的变…