首页 > 其他分享 >爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集

爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集

时间:2024-06-11 23:32:27浏览次数:29  
标签:插件 DrissionPage 代理 Auth 认证 proxy path 爬虫

背景/引言

大数据时代,网络爬虫技术已经成为数据收集的重要手段之一。爬虫技术可以自动化地从互联网上收集数据,节省大量人力和时间成本。然而,当使用需要身份验证的代理服务器时,许多现有的爬虫框架并不直接支持代理认证。这就需要我们寻找替代方案,以便在爬虫过程中能够顺利通过代理认证。

本文将介绍如何使用Python中的DrissionPage库,结合Auth代理的Chrome插件,实现从163新闻网站的数据采集。我们将以亿牛云爬虫代理为例,详细演示如何在程序中配置代理,确保爬虫能够高效、安全地运行。通过实例代码,我们将展示完整的实现流程,帮助开发者掌握从目标网站采集数据的实用技巧。

正文

1. 什么是DrissionPage?

DrissionPage是一款基于Python的网页自动化工具,结合了Web浏览器自动化的便利性和requests库的高效性。其设计初衷是提供一种人性化的使用方法,提高开发和运行效率。

2. 代理认证问题

由于许多爬虫框架不支持代理认证,因此我们需要采取其他方案来解决这一问题。常见的解决方案包括:

  1. 使用本地代理服务器(如Squid)将需要认证的代理转换为不需要密码的代理。
  2. 安装支持代理认证的Chrome插件(如SwitchyOmega),在插件中配置代理认证信息,然后使用框架接管浏览器。
  3. 通过代码生成包含代理认证信息的Chrome插件,并启动新的浏览器实例。

本文将重点介绍如何使用第三种方法,通过代码生成Chrome插件来配置代理认证信息。

实例

以下代码展示了如何通过创建Chrome插件来配置代理认证,并使用DrissionPage进行网页自动化操作,采集163新闻网站的数据。此方法可以在任何支持Chrome扩展的环境中使用。

代码语言:python 复制
import string
import os
from DrissionPage import ChromiumOptions, ChromiumPage

# 代理服务器信息(以亿牛云爬虫代理加强版为例)
proxyHost = "www.Host.cn"
proxyPort = "3111"

# 代理认证信息
proxyUser = "username"
proxyPass = "password"

def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http', plugin_path=None):
    # 创建Chrome插件的manifest.json文件内容
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "16YUN Proxy",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """

    # 创建Chrome插件的background.js文件内容
    background_js = string.Template(
        """
        var config = {
            mode: "fixed_servers",
            rules: {
                singleProxy: {
                    scheme: "${scheme}",
                    host: "${host}",
                    port: parseInt(${port})
                },
                bypassList: ["localhost"]
            }
        };

        chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

        function callbackFn(details) {
            return {
                authCredentials: {
                    username: "${username}",
                    password: "${password}"
                }
            };
        }

        chrome.webRequest.onAuthRequired.addListener(
            callbackFn,
            {urls: ["<all_urls>"]},
            ['blocking']
        );
        """
    ).substitute(
        host=proxy_host,
        port=proxy_port,
        username=proxy_username,
        password=proxy_password,
        scheme=scheme,
    )

    # 创建插件目录并写入manifest.json和background.js文件
    os.makedirs(plugin_path, exist_ok=True)
    with open(os.path.join(plugin_path, "manifest.json"), "w+") as f:
        f.write(manifest_json)
    with open(os.path.join(plugin_path, "background.js"), "w+") as f:
        f.write(background_js)
    
    return os.path.join(plugin_path)

# 指定插件路径
proxy_auth_plugin_path = create_proxy_auth_extension(
    plugin_path="/tmp/111",
    proxy_host=proxyHost,
    proxy_port=proxyPort,
    proxy_username=proxyUser,
    proxy_password=proxyPass
)

# 使用DrissionPage进行网页自动化,并加载代理认证插件
co = ChromiumOptions().add_extension(path=proxy_auth_plugin_path)
page = ChromiumPage(co)
page.get('https://news.163.com/')

# 打印页面标题
print(page.title)

结论

通过上述方法,我们可以有效地解决代理认证问题,并使用DrissionPage实现高效的网页自动化操作。无论是处理需要登录的网站还是复杂的JavaScript交互,DrissionPage都提供了一种简洁且高效的解决方案。结合代理认证插件的使用,可以进一步提高爬虫的隐私性和稳定性。这种方法不仅适用于163新闻网站的数据采集,还可以广泛应用于其他需要代理认证的网页数据采集任务。

标签:插件,DrissionPage,代理,Auth,认证,proxy,path,爬虫
From: https://www.cnblogs.com/huangcong/p/18243018

相关文章

  • 爬虫自动化之DRISSIONPAGE实现随时切换代理IP
    爬虫自动化之drissionpage实现随时切换代理iphttps://blog.csdn.net/qq_32334103/article/details/126133862下载SwitchyOmega地址:https://github.com/FelisCatus/SwitchyOmega/releases也可以直接用压缩文件打开,然后解压到当前文件夹123456789101112......
  • 霸王餐系统开发搭建,区别于霸王餐插件的一个霸王餐独立系
    据2022年美团财报统计,2023年美团外卖市场约500亿,霸王餐预计会占据外卖业务的20%份额,2024年霸王餐市场份额预计会达到100亿。市场空间巨大,将会是一个新的机遇一、什么的霸王餐系统霸王餐系统是一个促销营销活动平台,该平台通过极大的优惠赠送商品或服务吸引目标客户,以提高品牌......
  • MyBatisX插件逆向工程和SQL生成使用
    1.MyBatisX插件逆向工程将表映射成实体类在IDEA中装好MyBatisX插件并连接数据库后,对咬映射成实体类的表点击鼠标右键,如下图所示:之后会弹出如下界面:然后根据如图信息进行配置,点击next。如果使用的是MyBatis-Plus3直接按照下图选项即可:至此结束逆向工程将表映射成实体类。......
  • vs2022 AI插件 通义灵码
    一.推荐灵码推荐地址和官网介绍https://developer.aliyun.com/topic/lingma/activities/202405?taskCode=16245&recordId=25d6bfc41bf0b67809848dd90cf62ad6#/?utm_content=m_fission_1二.公测安装由于目前还是公测阶段所以官网还未展示vs2022的介绍后面公测结束了可以直接点......
  • Semantic Kernel入门系列:通过依赖注入管理对象和插件
    前言本章讲一下在SemanticKernel中使用DependencyInject(依赖注入),在之前的章节我们都是通过手动创建Kernel对象来完成框架的初始化工作,今天我们用依赖注入的方式来实现。实战定义NativePlugins我们用官网的LightPlugins插件来演示依赖注入在SK中的使用publicclassLightP......
  • 【IDEA 必备插件之一】这样注入 Bean 才爽
    今天我们来介绍一款免费的IDEA生产力插件,它叫BeanAssistant。我们可以在插件市场搜索BeanAssistant来安装它。前言不知道你们在平时的工作场景中是否经常遇到以下的情况。在一个方法中,需要调用某个实例接口的方法。我们经常会先在该类里面先注入这个接口的实例Bean,然后再调......
  • npm发布自己的插件包
    在JavaScript开发领域,npm(NodePackageManager)是不可或缺的包管理和分发工具,它不仅提供了海量的开源库供开发者使用,还允许每个人将自己的代码封装成包分享给全世界。发布一个npm插件包,不仅能提升个人影响力,还能促进技术交流与共享。本文将手把手教你如何发布npm包,同时指出过......
  • 01-前端开发Vscode插件配置
    01自动保存配置02空格渲染方式配置好以后,可以看到代码的空格有几个,以点的方式呈现,1个点表示1个空格03图标插件VSCodeGreatIcons04缩进推荐使用205vscode标记一整块代码文件>>首选项>>设置添加2行代码"editor.bracketPairColorization.enabled":true,"e......
  • cordova-plugin-inappbrowser内置浏览器插件
    一、InAppBrowser(内置浏览器)允许在在单独的窗口中加载网页。例如要向应用用户展示其他网页。当然可以很容易地在应用中加载网页内容并管理,但有时候需要不同的用户体验,InAppBrowser加载网页内容,应用用户可以更方便的直接返回到主应用。二、安装命令:cordovapluginaddcordov......
  • [IDA PRO] RVA 插件
    IDA插件-跳转到偏移量IDA插件-获取偏移量Shift+G跳转到指定RVACtrl+Shift+C(或右键选择)复制当前RVA到剪贴板#------------------------------------------------------------------------------#IDAPlugintojumptoanoffsetfromtheImagebase.#Copythe......