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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 使用Selenium爬取目标网站被识别的解决之法

在进行网络数据抓取和爬取时,Selenium是一个常用的工具,它可以模拟人类用户的行为,自动化地操作浏览器进行页面的访问和数据的提取。然而,随着网站对爬虫的检测能力不断提升,很多爬虫程序在运行过程中经常会遭遇被目标网站识别的问题,导致爬取失败或者被封禁。本文将介绍Selenium爬虫技术的概述、优势,以及一些应对被识别的解决方案。
Selenium爬虫技术概述
Selenium是一个自动化测试工具,最初用于Web应用的功能测试,后来被广泛应用于网络爬虫领域。它支持多种浏览器,包括Chrome、Firefox、Safari等,可以模拟用户在浏览器中的操作,如点击、输入、下拉等,实现对网页的自动化访问和数据提取。
Selenium爬虫技术优势

  1. 模拟真实用户行为:Selenium可以模拟人类用户在浏览器中的操作,如鼠标点击、键盘输入等,让爬虫行为更加接近真实用户,降低被识别的概率。
  2. 支持JavaScript渲染页面:许多现代网站采用了JavaScript动态渲染页面的技术,传统的爬虫工具往往无法正确解析这类页面,而Selenium可以完美应对,保证数据的完整性和准确性。
  3. 灵活性高:Selenium提供了丰富的API接口和强大的定制能力,可以根据实际需求编写复杂的爬虫程序,应对各种场景的数据提取需求。
    实现功能
    在使用Selenium进行爬虫程序开发时,我们通常需要实现以下功能:
  4. 模拟登录:如果目标网站需要登录才能访问需要的数据,我们需要编写代码模拟登录过程,包括输入用户名密码、点击登录按钮等。
  5. 页面访问:通过Selenium可以自动打开浏览器,并访问目标网页,获取页面源代码或者特定元素的内容。
  6. 数据提取:利用Selenium提供的API,可以定位页面上的特定元素,并提取其中的文本、链接、图片等信息。
  7. 处理动态页面:许多网站采用了JavaScript技术动态加载数据,这就需要使用Selenium模拟用户操作,触发页面的JavaScript代码执行,然后再提取数据。
    解决被识别的问题
    尽管Selenium具有很多优势,但在实际使用中,仍然会遇到被目标网站识别的问题。以下是一些常见的解决方案:
  8. 使用随机延时:在爬取过程中,模拟用户的行为时可以加入一些随机的延时,让爬虫的行为更加像真实用户,减少被识别的可能性。
  9. 设置User-Agent:通过设置合理的User-Agent头信息,可以让爬虫看起来更像普通用户,降低被识别的风险。
  10. 使用代理IP:通过使用代理IP,可以隐藏真实的访问来源,增加爬虫的隐蔽性,降低被封禁的概率。
  11. 定期更新代码:目标网站的反爬虫策略可能会不断变化,定期更新爬虫程序的代码,适应新的反爬虫措施。
    根据以上解决方案实现的完整代码过程如下:
    ```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()
```

相关文章
|
6月前
|
数据采集 Web App开发 搜索推荐
突破目标网站的反爬虫机制:Selenium策略分析
突破目标网站的反爬虫机制:Selenium策略分析
|
4月前
|
数据采集 前端开发 JavaScript
被爬网站用fingerprintjs来对selenium进行反爬,怎么破?
闲暇时看到一个问题关于如何应对FingerprintJS的唯一标记技术。FingerprintJS通过收集浏览器特性如Canvas、音频、字体及插件信息生成唯一标识符,用于识别和追踪用户。常见应对策略如使用`stealth.min.js`脚本或虚拟指纹插件有局限性。高级解决方案包括: - **浏览器特征随机化**:如Canvas和音频指纹随机化,动态替换插件和字体。 - **真实用户流量模拟**:模拟自然的鼠标移动与点击、键盘输入节奏。 - **服务端策略**:使用高质量代理IP服务,如青果网络提供的代理IP,结合IP地址轮换、会话管理和合理的切换频率设置。
|
3月前
|
数据采集 Web App开发 存储
基于Python的51job(前程无忧)招聘网站数据采集,通过selenium绕过网站反爬,可以采集全国各地数十万条招聘信息
本文介绍了一个使用Python和Selenium库实现的51job(前程无忧)招聘网站数据采集工具,该工具能够绕过网站的反爬机制,自动化登录、搜索并采集全国各地的招聘信息,将数据保存至CSV文件中。
132 0
|
6月前
|
安全 测试技术 API
Selenium框架添加CONNECT以抓取https网站
Selenium框架添加CONNECT以抓取https网站
|
数据采集 前端开发 安全
如何避免Selenium爬虫被网站识破
如何避免Selenium爬虫被网站识破
|
数据采集 Web App开发 安全
别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征
别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征
314 0
|
数据采集 JavaScript 前端开发
Selenium+代理爬取需要模拟用户交互的网站
Selenium+代理爬取需要模拟用户交互的网站
|
数据采集 数据可视化 JavaScript
使用 Python/Selenium 抓取网站的 Power BI dashboard
Power BI可以帮助用户从不同来源的数据中提取信息,生成交互式报表和可视化仪表盘。Power BI dashboard是Power BI的一个重要组成部分,它可以将来自多个数据源的数据整合到一个面板上,为用户提供全面的数据洞察。通过Power BI dashboard,用户可以方便地查看关键指标的实时数据、分析趋势变化和发现隐藏在数据中的模式和趋势。重点是Power BI dashboard是使用 JavaScript 呈现的,因此在尝试抓取任何数据之前,需要确保页面已完成加载。可以使用 WebDriverWait 类等待某个元素出现在页面上,这是页面加载完成的良好指示。
256 0
|
Web App开发 前端开发 测试技术
从零开始Web自动化(三):通过selenium,9行代码实现打字网站的自动打字
从零开始Web自动化(三):通过selenium,9行代码实现打字网站的自动打字
282 0
从零开始Web自动化(三):通过selenium,9行代码实现打字网站的自动打字
|
前端开发 JavaScript 测试技术
大型情感剧集Selenium:7_使用selenium,让整个网站都认识我!
通过这篇文章我想告诉你,任何人学selenium,都不是白费的!
153 0