爬虫代理技术与构建本地代理池的实践

爬虫中代理的使用:
  • 什么是代理
    • 代理服务器
  • 代理服务器的作用
    • 就是用来转发请求和响应

在这里插入图片描述

在爬虫中为何需要使用代理?

  • 隐藏真实IP地址:当进行爬取时,爬虫程序会发送大量的请求到目标网站。如果每个请求都使用相同的IP地址,可能会触发目标网站的反爬虫机制,导致IP被封禁或限制访问。使用代理可以隐藏真实IP地址,轮流使用多个代理IP来发送请求,降低被封禁的风险。
  • 绕过访问限制:某些网站可能会对特定IP地址或特定地区的访问进行限制,例如地理位置限制或登录限制。通过使用代理,可以模拟不同的IP地址和地理位置,绕过这些限制,获取需要的数据。
  • 提高访问速度:有些代理服务器可能位于目标网站的较近位置或具有更好的网络连接,通过使用这些代理,可以减少网络延迟,提高爬取速度。
  • 数据采集分布:使用代理可以将爬虫请求分布到不同的代理IP上,实现数据采集的分布式和并发处理,提高数据获取效率。

代理服务器可以根据其功能和使用方式分为以下几种类型:

  • 匿名代理:匿名代理服务器隐藏了客户端的真实IP地址,并将代理服务器的IP地址作为请求源地址发送给目标服务器。目标服务器无法直接识别客户端的真实身份。
  • 透明代理:透明代理服务器在转发请求时不修改客户端的IP地址,目标服务器可以直接获取到客户端的真实IP地址。透明代理主要用于缓存和访问控制,但无法提供匿名性。
  • 高匿代理:高匿代理服务器不仅隐藏了客户端的真实IP地址,还隐藏了代理服务器的存在。目标服务器无法检测到请求来自代理服务器。

代理从哪里获得:

  • 代理平台
  • 自己搭建一个本地代理池
  • 爬取公共代理

如何查询本地ip呢,网站:http://httpbin.org/ip,网页查看

在这里插入图片描述

import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='http://httpbin.org/ip'
headers = {'User-Agent':ua.chrome
}
ip=requests.get(url,headers=headers).json()['origin']
print('本地ip:',ip)

在这里插入图片描述

代理模板:

proxies={‘代理类型’:‘ip:port’}

proxies = {'http': '42.57.150.150:4278','https': '42.57.150.151:4279','ftp': '42.57.150.152:4280',# 添加更多协议和相应的代理
}
import requests
url = "你的目标网址"
headers = {"User-Agent": "你的用户代理"}
# 发送带有头部和代理的 GET 请求
page_text = requests.get(url=url, headers=headers, proxies=proxies)
# 现在,你可以通过 page_text.content、page_text.text 等来访问响应的内容。

如果我请求是http ,但只有https,就会使用本机ip。

  • 使用代理发起请求,查看是否可以返回代理服务器的ip

  • import requests
    from lxml import etree
    headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
    }
    url='http://httpbin.org/ip'
    #使用代理服务器发起请求
    #proxies={'代理类型':'ip:port'}
    data = requests.get(url=url,headers=headers,proxies{'https':'42.57.150.150:4278'}).json()['origin']
    print(data)
    
构建本地代理池:

根据代理IP提供的API构建本地代理池:

from bs4 import BeautifulSoup
from lxml import etree
import requests
import time
import random
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
url='http://http.tiqu.letecs.com/getip3?num=15&type=2&pro=&city=0&yys=0&port=1&pack=304028&ts=0&ys=0&cs=0&lb=6&sb=-&pb=4&mr=1&regions=&gm=4'
json_data = requests.get(url=url,headers=headers).json()# "code":0,"data":[{"ip":"120.34.156.191","port":4234,"outip":"120.34.156.191"},{"ip":"27.29.156.55","port":4267,"outip":"27.29.156.55"}
#     ,{"ip":"60.17.154.30","p
json_list = json_data['data']
proxy_list = [] #代理池,每次请求,可以随机从代理池中选择一个代理来用
for dic in json_list:ip = dic['ip']port = dic['port']n_dic = {'https':ip+':'+str(port) # {'https':'111.1.1.1:1234'}}proxy_list.append(n_dic)
print(proxy_list)
proxies=random.choice(proxy_list)
print(proxies)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】POCO学习总结(七):进程、管道、进程间同步、共享内存

【C】郭老二博文之:C目录 1、Poco::Process 进程 1.1 说明 Poco::Process的功能: 获取有关当前进程的一些信息开始一个新的进程终止另一个进程 1.2 用法 头文件:#include “Poco/Process.h” Poco::Process中的所有方法都是静态的。 常…

修复 MyBatis 中空值引起的 SQL 语法错误

修复 MyBatis 中空值引起的 SQL 语法错误 背景 最近在查看别人的项目代码时&#xff0c;遇到了一个问题&#xff1a;数据库中的数据为空。在调试过程中&#xff0c;发现问题出现在调用 MyBatis 中的方法&#xff1a;listByIds(Collection<? extends Serializable> idL…

[cmake] --- find_package

1 find_package的作用 find_package是CMake中用于查找并加载外部库的指令。它可以根据指定的参数在系统或用户指定的路径中查找库文件&#xff0c;并生成相应的变量供后续使用。 2 find_package基本语法 find_package(<PackageName> [version] [EXACT] [QUIET] [MODUL…

医学机器学习数据集介绍与使用 ABIDE Autism Brain Imaging Data Exchange I

ABIDE I 简介 自闭症脑成像数据交换I&#xff08;ABIDE I&#xff09;代表了第一个ABIDE倡议。作为基层工作&#xff0c;ABIDE I涉及17个国际站点&#xff0c;共享以前收集的静息态功能磁共振成像&#xff08;R-fMRI&#xff09;、解剖和表型数据集&#xff0c;这些数据集可供…

.net core 封装一个统一的返回结果

public class ApiResponse<T> { public bool Success { get; set; } public T? Data { get; set; } public string? Message { get; set; } public ApiResponse(bool success, T? data, string errorMessage "") { …

矩阵快速幂及应用实战[C/C++]

矩阵快速幂 矩阵快速幂可以用来优化递推问题&#xff0c;如状态机DP&#xff0c;需要一丢丢线性代数里面矩阵的概念&#xff0c;只需要知道简单的矩阵乘法&#xff0c;结合我们普通的二分快速幂就能很快的掌握矩阵快速幂。 问题引入 三步问题。有个小孩正在上楼梯&#xff0c;楼…

选择三个机器学习算法,代码实现 ,并选择一个数据集进行性能分析

1. 线性回归算法 线性回归是一种用于预测连续数值的监督学习算法。以下是使用Python和scikit-learn库实现线性回归的示例代码&#xff1a; import numpy as np from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from…

Linux(openssl):X509_verify通过ca证书的public key验证证书的签名

/docs/man3.0/man3/X509_verify.html (openssl.org) 提供了方法用于通过ca证书的public key验证证书的签名 //verify_cert.hpp #include <string> #include <memory> #include <filesystem> #include <openssl/pem.h>using namespace std; namespace …

一文学会Aiohttp

一、什么是aiohttp库 aiohttp库官网&#xff1a;https://docs.aiohttp.org/en/stable/ aiohttp是一个Python的HTTP客户端/服务器框架&#xff0c;它基于asyncio库实现异步编程模型&#xff0c;可以支持高性能和高并发的HTTP通信。aiohttp用于编写异步的Web服务器、Web应用程序…

【Vulnhub 靶场】【Coffee Addicts: 1】【简单-中等】【20210520】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/coffee-addicts-1,699/ 靶场下载&#xff1a;https://download.vulnhub.com/coffeeaddicts/coffeeaddicts.ova 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年5月20日 文件大小&#xff1a;1.3 …

【数值计算方法(黄明游)】常微分方程初值问题的数值积分法:欧拉方法(向后Euler)【理论到程序】

文章目录 一、数值积分法1. 一般步骤2. 数值方法 二、欧拉方法&#xff08;Euler Method&#xff09;1. 向前欧拉法&#xff08;前向欧拉法&#xff09;2. 向后欧拉法&#xff08;后向欧拉法&#xff09;a. 基本理论b. 算法实现 常微分方程初值问题的数值积分法是一种通过数值方…

webpack如何处理文件、图片

webpack5之前是通过&#xff0c;file-loader、raw-loader、url-loader处理文件 webpack5是通过使用资源模块类型&#xff08;asset module type&#xff09;处理文件 资源模块类型(asset module type)&#xff0c;通过添加 4 种新的模块类型&#xff0c;来替换所有这些 loade…

Linux常用命令——rm 命令

文章目录 Linux系统中的rm命令是一个非常强大且危险的工具&#xff0c;用于删除文件和目录。由于其具有不可逆的特性&#xff0c;了解其参数和正确使用非常重要。 1. 基本用法 rm命令的基本格式是rm [选项] 文件或目录。不带任何选项时&#xff0c;rm命令仅删除文件。 示例&a…

python读取excel自动化生成sql建表语句和java实体类字段

1、首先准备一个excel文件&#xff1a; idtypenameidint学号namestring姓名ageint年龄sexstring性别weightdecimal(20,4)体重scoredecimal(20,4)分数 2、直接生成java字段和注释&#xff1a; import pandas as pddf pd.read_excel(test.xlsx, sheet_nameSheet1)for i in ran…

java 对象大小计算

说明&#xff1a; 对于64位机&#xff1a;一个对象由三部分组成 对象头(object header) mark word &#xff1a;64bitkclass pointer &#xff1a;32bit(默认使用指针压缩)&#xff0c;如果取消指针压缩( XX:-UseCompressedOops)&#xff0c;则占用64bit数组长度&#xff1a;数…

Zynq-Linux移植学习笔记之67- 国产ZYNQ上通过GPIO模拟MDC/MDIO协议

1、背景介绍 模块上有9个PHY&#xff0c;其中两个PHY通过ZYNQ PS端的MDIO总线连接&#xff0c;其余7个PHY单独通过GPIO进行控制&#xff0c;需要实现GPIO模拟MDC/MDIO协议。 2、vivado工程设计 vivado工程内为每个PHY建立两个GPIO IP核&#xff0c;分别用来代表MDC和MDIO&…

基于BP神经网络的手写体数字识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 filename dir(images\*.bmp); %图像文件格式 load BP.matfilename dir(test\*.bmp); …

LeetCode Hot100 35.搜索插入位置

题目&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 方法&#xff1a;灵神 二分查找 闭区间写法 c…

PyQt基础_009_ 按钮类控件QSlider

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class SliderDemo(QWidget):def __init__(self, parentNone):super(SliderDemo, self).__init__(parent)self.setWindowTitle("QSlider 例子") self.resize…

【智能家居】面向对象编程OOP和设计模式(工厂模式)

面向对象编程 类和对象 面向对象编程和面向过程编程区别 设计模式 软件设计模式按类型分 工厂模式 面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种程序设计范式&#xff0c;其中程序被组织成对象的集合&#xff0c;每…