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

大连旅游网站建设大概多钱苏州优化价位

大连旅游网站建设大概多钱,苏州优化价位,网页设计基础课心得体会2000字,wordpress 404 跳转前言 在实际的爬虫应用中#xff0c;爬虫程序经常会通过代理服务器来进行网络访问#xff0c;以避免访问过于频繁而受到网站服务器的限制。但是#xff0c;代理服务器的IP地址也可能被目标网站限制#xff0c;导致无法正常访问。这时候#xff0c;我们需要在代理IP被封后…前言 在实际的爬虫应用中爬虫程序经常会通过代理服务器来进行网络访问以避免访问过于频繁而受到网站服务器的限制。但是代理服务器的IP地址也可能被目标网站限制导致无法正常访问。这时候我们需要在代理IP被封后立刻换下一个IP继续任务以保证爬虫的正常运行。 本文将介绍在Python中如何实现代理IP的动态切换并给出相关的代码案例。在讲解具体实现方法之前我们先了解一下代理服务器的基本原理。 一、 代理服务器的工作原理 代理服务器是一种在客户端与服务器之间进行转发的服务器。当客户端向服务器发起网络请求时代理服务器会先接收这个请求然后再将请求转发给目标服务器最后将目标服务器返回的响应结果再转发给客户端。代理服务器在这个过程中扮演了中间人的角色可以对客户端和服务器之间的通信进行拦截和修改。 代理服务器对爬虫程序的作用主要体现在以下两个方面 隐藏客户端的真实IP地址保护客户端的隐私和安全分散客户端的网络访问降低被目标服务器封禁的风险。 代理服务器有多种工作模式其中最常用的模式是HTTP代理。HTTP代理是基于HTTP协议的代理模式客户端的HTTP请求会先被发送到代理服务器上然后再由代理服务器转发给目标服务器例如以下代码 import requestsproxies {http: http://127.0.0.1:8080,  # HTTP代理服务器地址和端口https: http://127.0.0.1:8080  # HTTPS代理服务器地址和端口 }response requests.get(http://www.example.com, proxiesproxies) 在这个例子中我们使用了requests库来发送HTTP请求其中proxies参数指定了HTTP代理服务器的地址和端口。需要注意的是这里使用的代理服务器是本机上的一个HTTP代理服务器如果要使用其他代理服务器需要替换IP地址和端口号。 为了实现代理IP的动态切换我们需要了解如何使用Python来自动获取可用的代理IP列表并在IP被封后自动切换到下一个可用的IP。接下来我们将详细介绍这个过程。 二、获取可用的代理IP列表 获取可用的代理IP列表有多种方法其中一种常用的方法是从代理IP网站上爬取代理IP信息。代理IP网站上通常会提供免费的代理IP列表我们只需要对其进行爬取和验证即可得到可用的代理IP列表。 以下是一个实现自动获取代理IP列表的示例代码 import requests from bs4 import BeautifulSoup import timedef get_proxy_list():# 获取代理IP列表的URLurl http://www.example.com/proxy_list.html# 发送请求获取页面内容response requests.get(url)soup BeautifulSoup(response.text, html.parser)# 解析HTML页面获取代理IP列表proxy_list []for tr in soup.find_all(tr):tds tr.find_all(td)if len(tds) 2:ip tds[0].get_text()port tds[1].get_text()proxy {}:{}.format(ip, port)proxy_list.append(proxy)return proxy_listdef test_proxy(proxy):# 测试代理IP的可用性try:proxies {http: http://{}.format(proxy),https: https://{}.format(proxy)}response requests.get(http://www.baidu.com, proxiesproxies, timeout5)if response.status_code 200:return Trueexcept:return Falsedef get_available_proxies(proxy_list):# 获取可用的代理IP列表available_proxies []for proxy in proxy_list:if test_proxy(proxy):available_proxies.append(proxy)return available_proxiesif __name__ __main__:proxy_list get_proxy_list()available_proxies get_available_proxies(proxy_list)print(Available proxies: {}.format(available_proxies)) 在这个示例代码中我们首先定义了一个get_proxy_list函数用于从网站上获取代理IP列表。该函数通过requests库发送HTTP请求然后使用BeautifulSoup库解析HTML页面获取代理IP列表。 接下来我们定义了一个test_proxy函数用于测试代理IP的可用性。该函数使用requests库发送HTTP请求如果请求成功返回了200状态码则认为该代理IP可用。 最后我们定义了一个get_available_proxies函数用于获取可用的代理IP列表。该函数遍历原始代理IP列表依次测试每个代理IP的可用性将可用的代理IP添加到新的列表中。 注意在测试代理IP的可用性时我们需要设置一个较短的超时时间以避免因为等待时间过长而浪费时间。此外由于测试代理IP的过程很可能会失败因此我们还需要添加异常处理逻辑确保程序不会因为一个代理IP的失效而停止运行。 三、实现代理IP的动态切换 在获取可用的代理IP列表后我们需要实现代理IP的动态切换。具体思路是在向目标服务器发送HTTP请求前先从代理IP列表中选取一个可用的代理IP如果该代理IP不能正常工作则切换到下一个可用的代理IP直到找到能正常工作的代理IP为止。 以下是一个实现代理IP的动态切换的示例代码 import requests from bs4 import BeautifulSoup import random import time# 全局变量代理IP列表 PROXY_LIST []def get_proxy_list():# 获取代理IP列表的URLurl http://www.example.com/proxy_list.html# 发送请求获取页面内容response requests.get(url)soup BeautifulSoup(response.text, html.parser)# 解析HTML页面获取代理IP列表proxy_list []for tr in soup.find_all(tr):tds tr.find_all(td)if len(tds) 2:ip tds[0].get_text()port tds[1].get_text()proxy {}:{}.format(ip, port)proxy_list.append(proxy)return proxy_listdef test_proxy(proxy):# 测试代理IP的可用性try:proxies {http: http://{}.format(proxy),https: https://{}.format(proxy)}response requests.get(http://www.baidu.com, proxiesproxies, timeout5)if response.status_code 200:return Trueexcept:return Falsedef get_available_proxies(proxy_list):# 获取可用的代理IP列表available_proxies []for proxy in proxy_list:if test_proxy(proxy):available_proxies.append(proxy)return available_proxiesdef get_random_proxy():# 获取随机的代理IPglobal PROXY_LISTif not PROXY_LIST:# 第一次使用时先获取可用的代理IP列表proxy_list get_proxy_list()PROXY_LIST get_available_proxies(proxy_list)if not PROXY_LIST:# 如果没有可用的代理IP等待一段时间后重试time.sleep(60)proxy_list get_proxy_list()PROXY_LIST get_available_proxies(proxy_list)return random.choice(PROXY_LIST)def make_request(url):# 发送HTTP请求while True:# 从代理IP列表中随机选择一个IPproxy get_random_proxy()proxies {http: http://{}.format(proxy),https: https://{}.format(proxy)}try:# 发送HTTP请求response requests.get(url, proxiesproxies, timeout5)if response.status_code 200:return responseexcept:# 如果代理IP失效从列表中移除该IPPROXY_LIST.remove(proxy)if __name__ __main__:url http://www.example.comresponse make_request(url)print(response.text) 在这个示例代码中我们定义了一个全局变量PROXY_LIST用于保存可用的代理IP列表。首先我们定义了一个get_random_proxy函数用于从代理IP列表中随机选择一个代理IP并在需要时动态更新可用的代理IP列表。 接下来我们定义了一个make_request函数用于发送HTTP请求。该函数在调用get_random_proxy函数获取代理IP后使用requests库发送HTTP请求并在请求成功后返回响应结果。如果请求失败则说明代理IP失效需要从可用的代理IP列表中移除该代理IP并重新选择一个代理IP进行请求。 最后在程序的主函数中我们定义了一个URL地址并调用make_request函数发送HTTP请求。如果请求成功则输出响应内容。 至此我们已经完成了代理IP的动态切换功能的实现。接下来我们对上述代码进行修改加入一些必要的异常处理逻辑和日志记录功能。 四、异常处理和日志记录 在实际的爬虫应用中我们经常会遇到各种意外情况例如代理IP失效、网络连接超时、目标网站返回错误响应等。为了保证程序的稳定性和可靠性我们需要对这些情况进行合理的异常处理和日志记录。 以下是一个加入异常处理和日志记录的示例代码 import requests from requests.exceptions import ProxyError, Timeout, ConnectionError from bs4 import BeautifulSoup import random import time import logging# 全局变量代理IP列表 PROXY_LIST []def init_logging():# 初始化日志记录器logger logging.getLogger()logger.setLevel(logging.INFO)formatter logging.Formatter(%(asctime)s %(levelname)s %(message)s)handler logging.FileHandler(proxy.log)handler.setFormatter(formatter)logger.addHandler(handler)return loggerdef get_proxy_list():# 获取代理IP列表的URLurl http://www.example.com/proxy_list.html# 发送请求获取页面内容response requests.get(url)soup BeautifulSoup(response.text, html.parser)# 解析HTML页面获取代理IP列表proxy_list []for tr in soup.find_all(tr):tds tr.find_all(td)if len(tds) 2:ip tds[0].get_text()port tds[1].get_text()proxy {}:{}.format(ip, port)proxy_list.append(proxy)return proxy_listdef test_proxy(proxy):# 测试代理IP的可用性try:proxies {http: http://{}.format(proxy),https: https://{}.format(proxy)}response requests.get(http://www.baidu.com, proxiesproxies, timeout5)if response.status_code 200:return Trueexcept:return Falsedef get_available_proxies(proxy_list):# 获取可用的代理IP列表available_proxies []for proxy in proxy_list:if test_proxy(proxy):available_proxies.append(proxy)return available_proxiesdef get_random_proxy():# 获取随机的代理IPglobal PROXY_LISTif not PROXY_LIST:# 第一次使用时先获取可用的代理IP列表proxy_list get_proxy_list()PROXY_LIST get_available_proxies(proxy_list)if not PROXY_LIST:# 如果没有可用的代理IP等待一段时间后重试time.sleep(60)proxy_list get_proxy_list()PROXY_LIST get_available_proxies(proxy_list)return random.choice(PROXY_LIST)def make_request(url):# 发送HTTP请求while True:# 从代理IP列表中随机选择一个IPproxy get_random_proxy()proxies {http: http://{}.format(proxy),https: https://{}.format(proxy)}try:# 发送HTTP请求response requests.get(url, proxiesproxies, timeout5)if response.status_code 200:return responseexcept ProxyError as e:# 代理服务器错误从列表中移除该IPPROXY_LIST.remove(proxy)logging.warning(ProxyError: {}.format(str(e)))except Timeout as e:# 超时错误重试logging.warning(Timeout: {}.format(str(e)))except ConnectionError as e:# 连接错误重试logging.warning(ConnectionError: {}.format(str(e)))except Exception as e:# 其他未知错误重试logging.warning(Exception: {}.format(str(e)))if __name__ __main__:init_logging()url http://www.example.comresponse make_request(url)print(response.text) 在这个示例代码中我们首先引入了requests.exceptions模块和logging模块。requests.exceptions模块提供了一些常见的网络请求异常类型我们可以通过捕获这些异常类型来实现异常处理。logging模块则提供了一个日志记录器我们可以使用它来记录程序运行时的异常和错误信息。 接下来在程序的主函数中我们调用了一个init_logging函数用于初始化日志记录器。该函数设置了日志记录器的级别、格式和输出文件并返回一个记录器实例。 最后在make_request函数中我们通过try-except语句对网络请求中可能出现的异常进行了捕获和处理。例如如果代理服务器返回了错误码我们将该代理IP从列表中移除并记录警告日志。如果发生超时错误、连接错误或其他未知错误我们直接记录警告日志并在下一次循环中重试。 至此我们已经完成了对代理IP的动态切换功能的实现并加入了必要的异常处理和日志记录功能。 总结 为了实现在代理IP被封后立即切换到下一个IP我们可以在爬虫程序中加入一个代理IP池定时从可用的代理IP列表中随机选择一个IP并发送HTTP请求。如果请求失败我们可以将失败的代理IP从列表中移除并在下一次选择IP时避开此IP。同时我们需要加入必要的异常处理和日志记录功能以保证程序的稳定性和可靠性。这样即使某个代理IP被封我们也能够及时切换到下一个可用的IP继续执行爬虫任务。
http://www.dnsts.com.cn/news/204802.html

相关文章:

  • 苏州公司网站开发用织梦怎么做网站
  • 网站域名缴费wordpress搭建数据库
  • 宁波做网站公司哪家好企业百度网站怎么做的
  • 免费空间网站php怎么更改网站栏目id
  • 域名和网站名不一样营销网建
  • 网站个人建设wordpress如何创建导航
  • 做网站公司无锡河南省二级建造师报名入口官网
  • 更新网站的图片加不上水印去哪找做网站的客户
  • 东莞住建局网站用php做注册网站的代码
  • 网站代码管理wordpress安装没有选择语言
  • 门户网站建设 存在的问题wordpress大学百度云
  • 网站开发安卓开发cms网站是什么意思
  • 网站备案注销南宁网站设计要多少钱
  • 阿里云手机做网站寿光哪里做网站
  • 佛山公司网站推广外包服务湘潭做网站价格品牌磐石网络
  • 网站建设与管理考题网站开发人员分工
  • 吴桥网站网络推广销售是做什么的
  • 临海做网站seo培训一对一
  • php钓鱼网站怎么做视频教程江门市做网站
  • 自己怎么建个网站赚钱泰安网约车平台有哪些
  • 网站建设系统规划全网自媒体平台
  • 江苏城乡建设厅网站九江市建设项目服务中心
  • 中科诚建建设工程有限公司网站昆明网站开发建
  • 我的网站别人给黑链 攻击深圳注册公司流程图
  • 专业网站开发费用泰州企业网站建设
  • 电子商务网站页面设计图片建设银行客户投诉网站
  • 柳市网站制作如何在百度能搜索到公司网站
  • 西宁市建设网站价格低基层建设杂志网站
  • 济南 域名注册 网站建设物流企业网站模板
  • 电子商务网站开发的流程建设网站上海