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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 本文介绍了在Python中使用DrissionPage库和Auth代理Chrome插件抓取163新闻网站数据的方法。针对许多爬虫框架不支持代理认证的问题,文章提出了通过代码生成包含认证信息的Chrome插件来配置代理。示例代码展示了如何创建插件并利用DrissionPage进行网页自动化,成功访问需要代理的网站并打印页面标题。该方法有效解决了代理认证难题,提高了爬虫的效率和安全性,适用于各种需要代理认证的网页数据采集。

爬虫代理.jpg

背景/引言

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

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

正文

1. 什么是DrissionPage?

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

2. 代理认证问题

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

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

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

实例

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

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新闻网站的数据采集,还可以广泛应用于其他需要代理认证的网页数据采集任务。

相关文章
|
1月前
|
数据采集 存储 Go
Golang爬虫代理接入的技术与实践
Golang爬虫代理接入的技术与实践
|
1月前
|
数据采集 存储 JSON
【专栏】网络爬虫与数据抓取的基础知识,包括爬虫的工作原理、关键技术和不同类型
【4月更文挑战第27天】本文介绍了网络爬虫与数据抓取的基础知识,包括爬虫的工作原理、关键技术和不同类型。通过实例展示了如何构建简单爬虫,强调实战中的环境搭建、目标分析及异常处理。同时,文章探讨了法律、伦理考量,如尊重版权、隐私保护和合法用途,并分享了应对反爬策略。最后,倡导遵守数据抓取道德规范,以负责任的态度使用这项技术,促进数据科学的健康发展。
|
3天前
|
数据采集 网络协议
做爬虫数据采集需要哪种类型代理
在爬虫数据采集时,选择HTTP/HTTPS代理或SOCKS代理(特别是SOCKS5)以处理不同协议和提升匿名性。私密代理提供更高安全性和速度,而共享代理更具成本效益。高匿代理能最大程度隐藏真实IP和代理使用,降低被封锁风险。选择应基于任务需求和目标网站反爬策略。
|
1天前
|
数据采集 前端开发 JavaScript
Python爬虫技术:动态JavaScript加载音频的解析
Python爬虫技术:动态JavaScript加载音频的解析
|
1月前
|
数据采集 数据挖掘 Python
使用Python构建简单网页爬虫的技术指南
【5月更文挑战第17天】使用Python构建简单网页爬虫的教程,涉及`requests`和`BeautifulSoup4`库。首先安装所需库,然后发送HTTP GET请求获取HTML内容。利用`BeautifulSoup`解析HTML,找到目标元素,如`&lt;h2&gt;`标签内的新闻标题。处理相对链接,将它们转化为绝对URL。添加异常处理以应对网络问题,同时遵循网站的`robots.txt`规则。此爬虫适用于数据分析和市场研究等场景。
|
1月前
|
数据采集 存储 中间件
【专栏】随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用
【4月更文挑战第27天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程和中间件机制提升爬取效率。它的灵活性体现在可定制化组件、支持多种数据库存储及与Selenium、BeautifulSoup等工具集成。Scrapy易于扩展,允许自定义下载器和解析器。在实践中,涉及项目配置、Spider类编写、数据抓取、存储与分析。面对动态网页和反爬机制,Scrapy可通过Selenium等工具应对,但需注意法规与道德规范。随着技术发展,Scrapy将在网络爬虫领域持续发挥关键作用。
|
1月前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
1月前
|
数据采集 XML 数据处理
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页内容并进行简单的数据处理。通过学习本文,读者将了解Web爬虫的基本原理和Python爬虫库的使用方法。
|
5天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
70 9
|
16天前
|
数据采集 JSON API
自动化Reddit图片收集:Python爬虫技巧
自动化Reddit图片收集:Python爬虫技巧