饿滴神啊!寥寥几行写了个爬爬框架

本文介绍了如何结合BrowserMobProxy和Selenium开发网络爬虫,实现对网络请求的监控和数据统计。详细讲解了技术背景、功能需求、技术实现,包括BrowserMobProxyManager、SetupOption、Monitor、BaseSpider和DefaultCrawler的职责。并通过测试与评估展示了监控数据的输出,包括状态码、响应时间、资源类型和页面元素数量。最后提供了源码环境和获取资源的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术背景

在网络爬虫开发中,通过模拟浏览器行为去获取网络数据是一种常见的方式。而在这个过程中,我还需要监控网络请求、响应状态码、资源类型、响应时间等数据。本篇博文将介绍如何使用BrowserMobProxy结合Selenium进行网络爬虫开发,并结合Monitor类实现网络监控和数据统计。

功能需求

  1. 使用BrowserMobProxy管理代理,实现对网络请求的捕获和监控
  2. 配置Chrome浏览器选项,允许远程控制、忽略证书错误、设置浏览器驱动位置等
  3. Monitor类提供对状态码、响应时间、资源类型、页面元素等监控和数据统计
  4. BaseSpider类作为爬虫的抽象类,提供爬取和处理页面的方法
  5. DefaultCrawler类继承BaseSpider,实现具体的爬虫逻辑,包括解析页面元素和处理HarEntry数据

技术实现

BrowserMobProxyManager

职责:

  • 启动和停止BrowserMobProxy。
  • 创建新的HAR日志。
  • 启用或禁用特定的捕获类型。
  • 获取HAR日志。
package com.qcmb.crawler;

import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.Proxy;

/**
 * 负责BrowserMobProxy的配置和管理
 */
public class BrowserMobProxyManager {
    private final BrowserMobProxy proxy;

    public BrowserMobProxyManager(){
        proxy = new BrowserMobProxyServer();
    }

    public void start(String harName) {
        proxy.start(0);
        //初始化一个新的 HAR 日志,并指定要捕获的请求内容。
        proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT);
        //创建一个名为"MyTest"的新 HAR 日志。
        proxy.newHar(harName);
    }

    public Proxy getSeleniumProxy() {
        return ClientUtil.createSeleniumProxy(proxy);
    }

    public Har getHar() {
        return proxy.getHar();
    }

    public void stop() {
        proxy.stop();
    }
}

SetupOption

职责:

  • 设置Chrome浏览器的代理。
  • 允许远程控制浏览器。
  • 忽略一些安全警告。
  • 设置驱动程序的位置。
  • 设置专用浏览器的位置。
package com.qcmb.crawler;

import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeOptions;

/**
 * 配置
 */
public class SetupOption {
    private final String driverPath;
    private final String browserPath;
    //设置Chrome浏览器选项,以代理模式
    protected final ChromeOptions options;
    public SetupOption(String driverPath, String browserPath){
        options = new ChromeOptions();
        this.driverPath = driverPath;
        this.browserPath = browserPath;
    }

    public ChromeOptions initOptions(Proxy seleniumProxy){
        options.setProxy(seleniumProxy);
        //允许远程控制浏览器
        options.addArguments("--remote-allow-origins=*");
        //忽略一些安全
        options.addArguments("--ignore-certificate-errors");
        options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
        //驱动位置
        System.setProperty("webdriver.chrome.driver", driverPath);
        //专用浏览器位置
        options.setBinary(browserPath);
        return options;
    }


}

Monitor

职责:

  • 监控网络请求的状态码。
  • 监控网络请求的响应时间。
  • 监控网络请求的资源类型。
  • 监控页面元素的数量。
package com.qcmb.crawler;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 监控
 */
public class Monitor{
    //监控资源
    private final Map<String, ResourceType> resourceTypes =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值