Python爬虫之代理IP与访问控制

目录

前言

一、代理IP

1.1.使用代理IP的步骤

1.2.寻找可用的代理IP

1.3.设置代理IP

1.4.验证代理IP的可用性

二、访问控制

2.1.遵守Robots协议

2.2.设置访问时间间隔

2.3.多线程爬取

总结


前言

在进行Python爬虫过程中,代理IP与访问控制是我们经常需要处理的问题。本文将介绍代理IP与访问控制相关的知识,并提供相应的代码案例。

一、代理IP

在进行爬虫时,我们通常会遇到一些反爬虫的网站。为了应对这种情况,我们可以使用代理IP。代理IP的作用是通过一个中间服务器来访问目标网站,隐藏我们真实的IP地址,从而达到反爬虫的目的。

1.1.使用代理IP的步骤

使用代理IP主要包含以下步骤:

  1. 寻找可用的代理IP
  2. 设置代理IP
  3. 进行爬取操作

接下来我们将分别介绍这些步骤。

1.2.寻找可用的代理IP

寻找代理IP可以通过以下方式:

  1. 网上搜索:通过搜索引擎可以找到很多代理IP网站,但是这些网站提供的代理IP质量参差不齐,需要我们进行筛选。
  2. 付费购买:付费购买的代理IP较为稳定,但是价格相对较高。
  3. 自建代理:可以通过购买服务器自建代理IP,这种方式相对稳定,但需要一定的技术水平。

1.3.设置代理IP

在Python中,使用代理IP可以通过urllib库中的ProxyHandler类实现。下面是设置代理IP的示例代码:

import urllib.request

# 设置代理IP
proxy_handler = urllib.request.ProxyHandler({'http': 'http://127.0.0.1:8888'})
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

# 访问网站
response = urllib.request.urlopen('http://www.baidu.com')
html = response.read().decode('utf-8')
print(html)

在以上代码中,我们通过ProxyHandler类设置了代理IP,然后通过build_opener方法创建一个Opener对象,最后使用install_opener方法将该Opener对象安装为全局Opener。这样,在进行后续的网页访问时,就会自动使用代理IP了。

1.4.验证代理IP的可用性

为了提高效率,我们可以使用多个代理IP轮流使用。但是在使用之前,我们需要验证代理IP的可用性。以下是验证代理IP可用性的示例代码:

import urllib.request

# 设置代理IP
proxy_handler = urllib.request.ProxyHandler({'http': 'http://127.0.0.1:8888'})
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

# 验证代理IP可用性
try:
    response = urllib.request.urlopen('http://www.baidu.com', timeout=3)
    if response.getcode() == 200:
        print('IP可用')
except Exception as e:
    print('IP不可用')

在以上代码中,我们通过urlopen方法访问了百度网站,并设置了超时时间为3秒。如果连接成功,即返回了200状态码,则说明该代理IP可用。

二、访问控制

访问控制是指在进行爬虫时,需要遵循一定的爬取规则,如遵守网站的Robots协议、设置爬虫访问时间间隔等。以下我们将分别介绍这些规则。

2.1.遵守Robots协议

Robots协议是一种网站使用的协议,它告诉爬虫哪些页面可以访问、哪些页面不可以访问,以及访问间隔等信息。Robots协议通常存在于网站的根目录下的robots.txt文件中。

以下是一个Robots协议的示例:

User-agent: *
Disallow: /admin
Disallow: /tmp
Crawl-delay: 10

在以上协议中,User-agent表示爬虫的名称,*表示所有爬虫都要遵守该协议。Disallow表示不允许访问的路径,如上例中的/admin和/tmp。Crawl-delay表示访问间隔,如上例中的10秒。如果爬虫访问网站时违反了Robots协议,可能会被封禁IP或者限制爬取速度。

2.2.设置访问时间间隔

为了防止爬虫过于频繁的访问网站,我们需要设置访问时间间隔。下面是一个设置时间间隔的示例代码:

import time
import urllib.request

url = 'http://www.baidu.com'
interval = 5  # 时间间隔为5秒

while True:
    # 访问网站
    try:
        response = urllib.request.urlopen(url, timeout=3)
        if response.getcode() == 200:
            html = response.read().decode('utf-8')
            print(html)
    except Exception as e:
        print(e)

    # 等待时间间隔
    time.sleep(interval)

在以上代码中,我们设置了5秒的时间间隔。每次访问网站后,程序会等待5秒再进行下一次访问。

2.3.多线程爬取

为了提高爬取效率,我们可以使用多线程进行爬取。以下是使用多线程爬取的示例代码:

import threading
import urllib.request

url = 'http://www.baidu.com'

# 定义线程类
class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while True:
            # 访问网站
            try:
                response = urllib.request.urlopen(url, timeout=3)
                if response.getcode() == 200:
                    html = response.read().decode('utf-8')
                    print(html)
            except Exception as e:
                print(e)

# 创建线程对象并启动线程
for i in range(3):  # 启动3个线程
    t = MyThread()
    t.start()

在以上代码中,我们创建了一个线程类MyThread,该类继承自threading.Thread。在该类的run方法中,我们使用无限循环来访问网站。然后我们创建了3个线程对象,并启动了这些线程。

总结

本文介绍了Python爬虫中代理IP与访问控制的知识,并提供了相应的代码案例。在进行爬虫时,需要遵守网站的Robots协议、设置访问时间间隔等,以避免被网站封禁IP或限制爬取速度。同时,使用代理IP也是爬虫过程中常用的手段,可以帮助我们顺利的爬取目标网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/195946.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

11.盛最多的水的容器

一、题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 题目难度:中等 示例&a…

为什么API管理工具对开发人员有益?

应用程序编程接口 (API) 用于在应用程序之间创建连接,以允许它们相互通信。这种连接是当今数字世界运作方式不可或缺的一部分。实际上,API 使企业能够集成系统,通过创新提供更好的服务和产品。 这就是为什么在 IT 内部…

C语言常见算法

算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使…

低代码部署方式大揭秘:满足你的多种选择

本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 低代码开发平台为企业提供创新的应用程序开发和部署方法,让非技术人员也能够轻松创建和发布应…

C++ :静态成员

静态成员 静态成员就是在成员变量和成员函数前加上关键字 static ,称为静态成员 静态成员分为: 静态成员变量 1.所有对象共享同一份数据 2.在编译阶段分配内存 3.类内声明,类外初始化 静态成员函数 1.所有对象共享同一个函数 2.静态成…

【华为OD题库-040】计算最接近的数-java

题目 给定一个数组X和正整数K,请找出使表达式X[i]-x[i1]…-X[ik-1],结果最接近于数组中位数的下标i,如果有多个满足条件,请返回最大的i。 其中,数组中位数:长度为N的数组,按照元素的值大小升序排列后&#…

每日一练 | 华为认证真题练习Day138

1、IPv6地址FE80::2EO:FCFF:FE6F:4F36属于哪一类? A. 组播地址 B. 任播地址 C. 链路本地地址 D. 全球单播地址 2、如果IPv6的主机希望发出的报文最多经过10台路由器转发,则应该修改IPv6报文头中的哪个参数? A. Next Header B. Version …

基于单片机的大棚温湿度检测系统(论文+源码)

1. 系统设计 本课题主要开发一个大棚温湿度检测系统、其功能要求如下: 1.实现大棚温室环境的空气中的温湿度检测; 2.当检测到的土壤湿度低于阈值时,模拟水泵进行浇水,湿度太高则进行干燥; 4. 当检测到环境的温度太…

Git开发实用技巧

文章目录 一图胜千言:

【JMeter】配置元件

1. 元件的分类 HTTP Request Default 作用: 可以配置成通用的信息,可复用 ​​​​​​​ JDBC Connection Configuration 作用:连接数据库 前提: 下载好对应数据类型的jar包 ​​​​​​​ HTTP Header Manager信息头管理…

触控板窗口管理软件Swish mac中文版

Swish mac是一款触控板窗口管理工具,它允许用户通过简单的手势来控制窗口。Swish利用MacBook的触控板,使得用户可以更加便捷地管理窗口。它支持多种手势,例如捏合、拖动、放大和缩小等,使得用户可以轻松地实现窗口的切换、最小化、…

【项目实战】SpringBoot连接openGauss

一:Docker安装openGauss 1.下载openGauss 安装好Docker好以后,执行如下命令下载openGauss3.0镜像。docker pull enmotech/opengauss:3.0.0 2.运行openGauss 执行如下命令docker run -itd --name opengauss \ --restartalways \ --privilegedtrue \ …

老师怎样预防校园欺凌的发生

作为老师,面对校园欺凌这个问题,我觉得有必要为各位老师提供一些实用的建议和策略。因为大家都知道,校园欺凌的存在不仅会对学生造成身心伤害,还会对整个教育环境产生负面影响。 关注学生的心理健康 校园欺凌往往与学生的心理问题…

第二证券:北证50飙升引发跷跷板效应

沪指周一低开震动,盘中一度杀跌进入3000点整数关口,尽管午后跌幅有所收窄,但毕竟收盘仍在30日均线下方。深成指相同低开低走,表现稍弱于沪指。到收盘,沪指报收3031.7点,跌落0.3%;深成指报收9785…

【JavaScript】实现页面中填写文档、电子签名,填写完后 转为pdf并自动下载;附带psd转图片预览效果

效果图&#xff1a; 需求&#xff1a; 用户可以在线进行文档编辑&#xff0c;在线电子签名&#xff0c;然后点击可以另存为pdf文档 实现&#xff1a; 首先实现布局 让填写文档 随着页面的变化 一直保持居中 <!DOCTYPE html> <html lang"en"><head…

十八数藏的文化数字革新:传统之美的数字转变

在数字时代的冲击下&#xff0c;十八数藏以其独特的文化数字革新&#xff0c;将传统之美注入数字的脉络中&#xff0c;实现了非遗之珍的数字转变。这种数字化的创新不仅为传统工艺赋予了新的生命&#xff0c;也使得传承变得更为生动与全面。 十八数藏通过数字技术&#xff0c;将…

腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群

原创/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋&#xff0c;打算搭建一堆docker组件集群&#xff0c;最先开始是通过docker搭建redis集群&#xff0c;计划使用三个端口&#xff0c;分别是7001,7002,7003。 腾讯云服务器有防火墙限制&#xff0c;故…

建议收藏:华为海思IC设计笔试题,含解析(附下载)

华为海思一直以来是从业者想要进入的热门公司。但是岗位就那么多&#xff0c;在面试的时候&#xff0c;很多同学因为准备不充分&#xff0c;与岗位失之交臂&#xff0c;无缘进入该公司。今天为大家带来华为海思芯片岗的真题解析&#xff0c;如有错漏&#xff0c;欢迎指正哈。 今…

大数据平台/大数据技术与原理-实验报告--MapReduce编程

实验名称 MapReduce编程 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.30-2023.11.03 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有centos7.5系统…

Vue3-VueRouter4路由语法解析

1.创建路由实例由createRouter实现 2.路由模式 1&#xff09;history模式使用createWebHistory()&#xff1a;地址栏不带# 2&#xff09;hash模式使用createWebHashHistory()&#xff1a;地址栏带# 3&#xff09;参数是基础路径&#xff0c;默认/ 括号里的就是设置路径的前…