> 技术文档 > 使用Selenium与WebDriver实现跨浏览器自动化数据抓取

使用Selenium与WebDriver实现跨浏览器自动化数据抓取

背景/引言

  在数据驱动的时代,网络爬虫成为了收集和分析海量数据的关键工具。为了应对不同浏览器环境下的兼容性问题,Selenium与WebDriver成为了开发者实现跨浏览器自动化数据抓取的首选工具。本文将深入探讨如何利用Selenium和WebDriver实现跨浏览器的数据抓取,并结合代理IP技术提升数据抓取的稳定性与效率。同时,我们还将讨论如何设置user-agent和cookie以模拟真实用户行为,避免被网站检测和阻止。

  1. Selenium与WebDriver概述

  Selenium是一个开源的自动化测试工具,广泛用于模拟用户与网页的交互。WebDriver是Selenium的一部分,支持多种浏览器(如Chrome、Firefox、Edge等)的自动化操作,使得开发者能够在不同的浏览器中执行一致的数据抓取流程。

  使用Selenium的优势包括:

  + 跨浏览器兼容性:支持主流浏览器的自动化操作。

  + 强大的API:简化与页面元素的交互操作。

  + 灵活的扩展性:可以与其他库(如BeautifulSoup、pandas)结合使用。

  2. 使用代理IP技术提升爬虫效率

  网络爬虫常常面临IP封禁、请求频率限制等挑战。通过使用代理IP,爬虫能够在一定程度上绕过这些限制。本文将使用爬虫代理,具体实现过程包括代理IP的配置及其在爬虫中的使用。

  代理IP的配置参数(以爬虫代理为例):

  + 域名:`proxy.16yun.cn`

  + 端口:`12345`

  + 用户名:`your_username`

  + 密码:`your_password`

  3. 设置user-agent与cookie

  设置user-agent可以使请求看起来像是由真实用户发出的,而不是脚本或爬虫。cookie则有助于保存用户会话信息,在爬取需要登录的网站时非常有用。

  4. 实现跨浏览器自动化抓取的代码

  以下为使用Selenium与WebDriver实现的跨浏览器数据抓取代码,结合代理IP、user-agent和cookie的设置。


  1. ```python

  2.   import os

  3.   from selenium import webdriver

  4.   from selenium.webdriver.common.by import By

  5.   from selenium.webdriver.chrome.options import Options

  6.   from selenium.webdriver.common.proxy import Proxy, ProxyType

  7.   # 设置代理IP信息 亿牛云爬虫代理 www.16yun.cn

  8.   proxy_ip = \"proxy.16yun.cn:12345\"

  9.   proxy = Proxy({

  10.   ? ? \'proxyType\': ProxyType.MANUAL,

  11.   ? ? \'httpProxy\': proxy_ip,

  12.   ? ? \'sslProxy\': proxy_ip,

  13.   ? ? \'ftpProxy\': proxy_ip,

  14.   ? ? \'noProxy\': \'\'? # 对哪些地址不使用代理

  15.   })

  16.   # Chrome浏览器选项

  17.   chrome_options = Options()

  18.   chrome_options.add_argument(\"--headless\")? # 无头模式

  19.   chrome_options.add_argument(f\"--proxy-server={proxy_ip}\")? # 代理服务器设置

  20.   chrome_options.add_argument(\"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\")? # 设置user-agent

  21.   chrome_options.add_argument(\"--disable-blink-features=AutomationControlled\")? # 防止被识别为自动化工具

  22.   # 初始化WebDriver

  23.   driver = webdriver.Chrome(options=chrome_options)

  24.   # 设置Cookie

  25.   cookie = {

  26.    \'name\': \'sessionid\',

  27.    \'value\': \'your_cookie_value\',

  28.    \'domain\': \'.51job.com\'? # 设置cookie的域为51job

  29.   }

  30.   # 打开51job网站

  31.   driver.get(\'https://www.51job.com\')

  32.   driver.add_cookie(cookie)? # 添加cookie

  33.   driver.refresh()? # 刷新页面以使cookie生效

  34.   # 创建存储简历信息的目录

  35.   if not os.path.exists(\"resumes\"):

  36.    os.makedirs(\"resumes\")

  37.   # 数据抓取和分类存储过程

  38.   try:

  39.    # 示例XPath:根据实际页面布局调整XPath,以下XPath仅为演示目的

  40.    elements = driver.find_elements(By.XPATH, \'//div[@class=\"el\"]\')

  41.    # 遍历每条招聘信息并抓取相关个人信息

  42.    for index, element in enumerate(elements):

  43.    # 提取个人信息数据:假设页面上包含姓名、职位、公司、工作地点等信息

  44.    name = element.find_element(By.XPATH, \'.//p[@class=\"t1\"]/span/a\').text? # 姓名

  45.    position = element.find_element(By.XPATH, \'.//span[@class=\"t2\"]\').text? # 职位

  46.    company = element.find_element(By.XPATH, \'.//span[@class=\"t3\"]\').text? # 公司

  47.    location = element.find_element(By.XPATH, \'.//span[@class=\"t4\"]\').text? # 工作地点

  48.    # 存储到文件

  49.    resume_file = f\"resumes/resume_{index+1}.txt\"

  50.    with open(resume_file, \'w\', encoding=\'utf-8\') as f:

  51.    f.write(f\"姓名: {name}\\n\")

  52.    f.write(f\"职位: {position}\\n\")

  53.    f.write(f\"公司: {company}\\n\")

  54.    f.write(f\"工作地点: {location}\\n\")

  55.    print(f\"已存储简历信息到文件: {resume_file}\")

  56.   except Exception as e:

  57.    print(f\"抓取失败: {e}\")

  58.   finally:

  59.    # 关闭浏览器

  60.    driver.quit()

  61.   # 提示:代理IP可组合为http://username:password@proxy.16yun.cn:12345使用

  62.   ```

代码解读:

  1. 代理IP设置:通过代理参数将爬虫代理集成到WebDriver的请求中。此代理会将所有HTTP、HTTPS请求都通过代理服务器发出。

  2. user-agent设置:模拟一个真实的浏览器请求,避免被目标网站识别为爬虫。

  3. cookie设置:通过`driver.add_cookie()`方法向目标网页添加cookie,以便保持登录状态或其他会话信息。

  4. 跨浏览器支持:通过Selenium的WebDriver API,该代码可轻松适配到其他浏览器如Firefox或Edge,只需更改对应的驱动和选项设置。

  5. 结论

  通过Selenium与WebDriver,我们能够轻松实现跨浏览器的数据抓取,并通过使用代理IP、设置user-agent与cookie等技术,提升了爬虫的稳定性和隐蔽性。在实际应用中,合理配置这些参数能够有效减少爬虫被封禁的风险,并提升数据抓取效率。代理IP的选择至关重要,本文使用的爬虫代理为爬虫提供了可靠的解决方案。在实际项目中,可根据目标网站的防护措施调整相关设置,进一步优化抓取策略。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取