当前位置: 首页 > news >正文

仿第四城地方门户网站模板python可以做网站吗

仿第四城地方门户网站模板,python可以做网站吗,苏州建筑公司排名,重要的建设工程人员查询作为一名程序员,你是否曾遇到过爬虫IP被频繁封禁的困扰?在日常数据采集任务中,我们常常需要面对网站的反爬机制。使用Selenium配合隧道代理成为了一种有效的解决方案。本文将手把手教你如何搭建稳定的爬虫系统,让你的数据采集工作…

作为一名程序员,你是否曾遇到过爬虫IP被频繁封禁的困扰?在日常数据采集任务中,我们常常需要面对网站的反爬机制。使用Selenium配合隧道代理成为了一种有效的解决方案。本文将手把手教你如何搭建稳定的爬虫系统,让你的数据采集工作更加高效顺畅,不再为IP限制而烦恼。

在这里插入图片描述

下面是一个使用Selenium配合隧道代理进行网页爬取的完整示例代码。这里以Chrome浏览器为例,使用Python语言实现。

安装必要库

pip install selenium

完整代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time
import logging# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')class SeleniumProxyCrawler:def __init__(self, proxy_url):"""初始化爬虫Args:proxy_url: 隧道代理URL,格式为 http://username:password@proxy_ip:proxy_port"""self.proxy_url = proxy_urlself.driver = Nonedef setup_driver(self):"""设置Chrome浏览器选项并初始化驱动"""chrome_options = Options()# 添加代理设置chrome_options.add_argument(f'--proxy-server={self.proxy_url}')# 可选:无头模式(不显示浏览器界面)# chrome_options.add_argument('--headless')# 其他常用选项chrome_options.add_argument('--no-sandbox')chrome_options.add_argument('--disable-dev-shm-usage')chrome_options.add_argument('--disable-gpu')chrome_options.add_argument('--window-size=1920,1080')chrome_options.add_argument('--disable-blink-features=AutomationControlled')# 排除自动化测试提示chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])chrome_options.add_experimental_option('useAutomationExtension', False)# 初始化WebDrivertry:self.driver = webdriver.Chrome(options=chrome_options)# 修改webdriver值以防被检测self.driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")except Exception as e:logging.error(f"初始化WebDriver失败: {e}")raisedef crawl_page(self, url, wait_element=None, timeout=10):"""爬取指定页面Args:url: 目标URLwait_element: 等待的元素选择器(可选)timeout: 超时时间(秒)Returns:page_source: 页面源代码"""if not self.driver:self.setup_driver()try:# 访问页面logging.info(f"正在访问: {url}")self.driver.get(url)# 如果需要等待特定元素加载if wait_element:try:WebDriverWait(self.driver, timeout).until(EC.presence_of_element_located((By.CSS_SELECTOR, wait_element)))logging.info("目标元素已加载完成")except TimeoutException:logging.warning("等待元素超时,继续执行")# 获取页面内容page_source = self.driver.page_sourcelogging.info("页面获取成功")return page_sourceexcept Exception as e:logging.error(f"爬取页面时发生错误: {e}")return Nonedef extract_data(self, page_source, extract_rules):"""从页面源代码中提取数据(示例函数)Args:page_source: 页面源代码extract_rules: 提取规则字典Returns:提取的数据"""# 这里可以添加具体的解析逻辑# 可以使用BeautifulSoup、lxml等库进行解析# 这里只是一个示例from bs4 import BeautifulSoupsoup = BeautifulSoup(page_source, 'html.parser')extracted_data = {}for key, selector in extract_rules.items():elements = soup.select(selector)extracted_data[key] = [elem.get_text(strip=True) for elem in elements]return extracted_datadef take_screenshot(self, filename='screenshot.png'):"""截取当前页面截图"""try:self.driver.save_screenshot(filename)logging.info(f"截图已保存为: {filename}")except Exception as e:logging.error(f"截图失败: {e}")def close(self):"""关闭浏览器"""if self.driver:self.driver.quit()logging.info("浏览器已关闭")def __enter__(self):"""上下文管理器入口"""return selfdef __exit__(self, exc_type, exc_val, exc_tb):"""上下文管理器出口"""self.close()# 使用示例
def main():# 隧道代理配置(请替换为实际的代理信息)# 格式: http://用户名:密码@代理服务器地址:端口proxy_url = "http://your_username:your_password@proxy.example.com:8080"# 目标URLtarget_url = "https://httpbin.org/ip"  # 这个网站会返回你的IP地址,用于测试代理是否生效# 创建爬虫实例crawler = SeleniumProxyCrawler(proxy_url)try:# 设置浏览器crawler.setup_driver()# 爬取页面page_source = crawler.crawl_page(target_url, wait_element="body",  # 等待body元素加载timeout=15)if page_source:# 打印页面内容(这里会显示代理IP)print("页面内容:")print(page_source[:1000])  # 只打印前1000个字符# 截图保存crawler.take_screenshot("proxy_test.png")# 示例:提取数据extract_rules = {"ip": "pre"  # 根据实际页面结构调整}data = crawler.extract_data(page_source, extract_rules)print("提取的数据:", data)except Exception as e:logging.error(f"主程序执行错误: {e}")finally:# 确保浏览器关闭crawler.close()# 异步爬取多个页面的示例
def batch_crawl_example():proxy_url = "http://your_username:your_password@proxy.example.com:8080"urls_to_crawl = ["https://httpbin.org/ip","https://httpbin.org/user-agent","https://httpbin.org/headers"]with SeleniumProxyCrawler(proxy_url) as crawler:for i, url in enumerate(urls_to_crawl):logging.info(f"正在爬取第 {i+1} 个URL: {url}")page_source = crawler.crawl_page(url, wait_element="body", timeout=10)if page_source:# 这里可以添加数据处理和保存逻辑print(f"URL {url} 的内容长度: {len(page_source)}")# 添加延迟,避免请求过于频繁time.sleep(2)if __name__ == "__main__":# 运行单个页面爬取示例main()# 运行批量爬取示例# batch_crawl_example()

重要说明

1、代理配置:需要将proxy_url替换为实际的隧道代理地址,格式通常为http://用户名:密码@代理服务器:端口

2、ChromeDriver:确保已下载与Chrome浏览器版本匹配的ChromeDriver,并将其路径添加到系统PATH中

3、异常处理:代码包含了基本的异常处理,在实际使用中可能需要根据具体需求进行调整

4、反爬虫策略

  • 随机延迟请求
  • 使用不同的User-Agent
  • 处理验证码等反爬机制

5、性能优化

  • 考虑使用无头模式(headless)提高性能
  • 合理设置等待时间
  • 复用浏览器实例

扩展建议

1、添加User-Agent轮换功能

2、实现IP池管理,多个代理切换使用

3、添加数据存储功能(数据库、文件等)

4、实现分布式爬虫架构

5、添加更完善的日志和监控系统

这个示例提供了一个基本框架,你可以根据实际需求进行修改和扩展。

通过本文的实战演示,相信你已经掌握了Selenium结合隧道代理的开发技巧。在实际项目中,记得合理设置请求频率,遵守robots协议。技术的价值在于解决实际问题,希望这个方案能提升你的开发效率。如果在实现过程中遇到问题,欢迎在评论区交流讨论,我们一起进步成长!

http://www.dtcms.com/a/609440.html

相关文章:

  • ToDesk如何充当分屏显示器?扩展屏、多屏结合虚拟屏都可行!
  • qKnow 知识平台开源版 v1.0.3 发布:Docker Compose 部署 多项稳定性优化和关键问题修复
  • 【Prompt学习技能树地图】检索增强生成(RAG)核心技术剖析与实践指南
  • Zookeeper在Kafka中的作用
  • MySQL数据表操作
  • 访问外国网站速度慢怎样优化标题关键词
  • 《VScode搭建教程(附安装包)--- 开启你的编程之旅》
  • MFC Edit Control控件完全指南:从基础使用到高级定制
  • C语言编译器安装教程 | 快速上手C语言编译环境的配置与调试
  • C库OpenSSL安装与VisualStudio配置
  • ppt模板免费下载网站不需要登录网页设计的三大基本技术
  • 什么是营销型网站?h5可以连接别的网站吗
  • Android13修改系统支持gps同步时间
  • Webpack到Vite:构建工具迁移实战经验总结
  • QT音乐播放器18----新歌速递播放、隐藏顶部和底部工具栏、自定义ToolTips
  • 工控一体机在超声波清洗机中的应用
  • Qt5配置MSVC2017
  • 【AI】基于YOLO11-SEG的PCB缺陷检测与分类系统实现_3
  • 2. Qt深入 线程
  • [Godot] C#基于噪声的简单TileMap地图生成
  • Linux(4)—— 基础开发工具
  • 广州好的网站设计公司如何建单位网站
  • 无损改造+智能防控,安科瑞ASCB3为古建筑与历史街区量身打造安全用电解决方案
  • 解决“Move to iOS 卡在准备中”的 9 种有效方法
  • iOS IPA 上传工具全面解析,从 Transporter 到开心上架(Appuploader)命令行的高效上架实践
  • iOS性能调优的系统化实践,从架构分层到多工具协同的全流程优化指南(开发者深度版)
  • GitHub爆火开源项目——RustScan深度拆解
  • iOS和安卓应用上架全指南:从备案到审核发布
  • 海外购物网站排名云商网站建设
  • 解决 Node.js 18+ 构建错误:digital envelope routines::unsupported 完全指南