• 使用Selenium爬取目标网站被识别的解决之法


    在进行网络数据抓取和爬取时,Selenium是一个常用的工具,它可以模拟人类用户的行为,自动化地操作浏览器进行页面的访问和数据的提取。然而,随着网站对爬虫的检测能力不断提升,很多爬虫程序在运行过程中经常会遭遇被目标网站识别的问题,导致爬取失败或者被封禁。本文将介绍Selenium爬虫技术的概述、优势,以及一些应对被识别的解决方案。

    Selenium爬虫技术概述

    Selenium是一个自动化测试工具,最初用于Web应用的功能测试,后来被广泛应用于网络爬虫领域。它支持多种浏览器,包括Chrome、Firefox、Safari等,可以模拟用户在浏览器中的操作,如点击、输入、下拉等,实现对网页的自动化访问和数据提取。

    Selenium爬虫技术优势

    1. 模拟真实用户行为:Selenium可以模拟人类用户在浏览器中的操作,如鼠标点击、键盘输入等,让爬虫行为更加接近真实用户,降低被识别的概率。
    2. 支持JavaScript渲染页面:许多现代网站采用了JavaScript动态渲染页面的技术,传统的爬虫工具往往无法正确解析这类页面,而Selenium可以完美应对,保证数据的完整性和准确性。
    3. 灵活性高:Selenium提供了丰富的API接口和强大的定制能力,可以根据实际需求编写复杂的爬虫程序,应对各种场景的数据提取需求。

    实现功能

    在使用Selenium进行爬虫程序开发时,我们通常需要实现以下功能:

    1. 模拟登录:如果目标网站需要登录才能访问需要的数据,我们需要编写代码模拟登录过程,包括输入用户名密码、点击登录按钮等。
    2. 页面访问:通过Selenium可以自动打开浏览器,并访问目标网页,获取页面源代码或者特定元素的内容。
    3. 数据提取:利用Selenium提供的API,可以定位页面上的特定元素,并提取其中的文本、链接、图片等信息。
    4. 处理动态页面:许多网站采用了JavaScript技术动态加载数据,这就需要使用Selenium模拟用户操作,触发页面的JavaScript代码执行,然后再提取数据。

    解决被识别的问题

    尽管Selenium具有很多优势,但在实际使用中,仍然会遇到被目标网站识别的问题。以下是一些常见的解决方案:

    1. 使用随机延时:在爬取过程中,模拟用户的行为时可以加入一些随机的延时,让爬虫的行为更加像真实用户,减少被识别的可能性。
    2. 设置User-Agent:通过设置合理的User-Agent头信息,可以让爬虫看起来更像普通用户,降低被识别的风险。
    3. 使用代理IP:通过使用代理IP,可以隐藏真实的访问来源,增加爬虫的隐蔽性,降低被封禁的概率。
    4. 定期更新代码:目标网站的反爬虫策略可能会不断变化,定期更新爬虫程序的代码,适应新的反爬虫措施。

    根据以上解决方案实现的完整代码过程如下:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.keys import Keys
    import random
    import time
    
    # 随机延时函数
    def random_delay():
        delay = random.randint(1, 5)  # 随机生成1到5秒的延时
        time.sleep(delay)
    
    # 设置User-Agent头信息
    def set_user_agent():
        user_agents = [
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
            # 其他常见的User-Agent
        ]
        options = Options()
        options.add_argument(f'user-agent={random.choice(user_agents)}')
        return options
    
    # 主程序
    def main():
        url = "https://example.com"  # 替换为目标网站的URL
    
        # 设置Chrome浏览器选项
        chrome_options = set_user_agent()
        
        # 添加代理信息
        proxyHost = "www.16yun.cn"
        proxyPort = "5445"
        proxyUser = "16QMSOML"
        proxyPass = "280651"
        proxy_options = f"--proxy-server=http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
        chrome_options.add_argument(proxy_options)
    
        # 初始化Chrome浏览器
        driver = webdriver.Chrome(options=chrome_options)
    
        try:
            # 随机延时
            random_delay()
    
            # 访问目标网站
            driver.get(url)
    
            # 在这里可以继续编写爬取逻辑,如模拟点击、提取数据等
    
            print("爬取成功!")
    
        except Exception as e:
            print("爬取失败:", e)
    
        finally:
            # 关闭浏览器
            driver.quit()
    
    if __name__ == "__main__":
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 相关阅读:
    Redis 非关系型数据库学习(三)---- Redis 基础知识
    日本IT行业现状 日本IT的优缺点
    【java,系统结构设计】三层类结构设计
    三、机器学习基础知识:Python常用机器学习库(图像处理相关库)
    Java基础:Java虚拟机JVM
    文章生成器免费版
    CTF-SSH私钥泄露【简单易懂】
    C语言程序的编译(预处理)概述 —— 上
    SSM实验室设备管理
    SpringBoot测试类
  • 原文地址:https://blog.csdn.net/Z_suger7/article/details/138162387