python爬虫代理ip关于设置proxies的问题

news2024/12/23 14:18:32

目录

前言

一、什么是代理IP?

二、为什么需要设置代理IP?

三、如何设置代理IP?

四、完整代码

总结


前言

在进行Python爬虫开发时,经常会遇到被封IP或者频繁访问同一网站被限制访问等问题,这时,使用代理IP就可以避免这些问题,保证爬虫程序正常运行。本文将介绍如何使用Python设置代理IP,以及如何使用代理IP访问指定的网站。主要介绍通过urllib库实现网页访问时,如何通过设置代理IP来实现IP轮换、反反爬虫等功能。

一、什么是代理IP?

代理IP是指通过代理服务器获取的IP地址,因为代理服务器具有隐藏用户真实IP、改变客户端访问地址、提高访问速度、突破访问限制等功能,所以使用代理IP可以实现一些数据获取的目的。

二、为什么需要设置代理IP?

在爬虫开发过程中,经常会遇到被封IP或者频繁访问同一网站被限制访问等问题。这时,使用代理IP就可以避免这些问题,保证爬虫程序正常运行。

三、如何设置代理IP?

在Python中,使用urllib库实现网页访问时,可以通过设置代理IP来实现IP轮换、反反爬虫等功能。下面,我们以爬取某个网站为例,讲解如何设置代理IP。

首先,我们需要从免费的代理IP网站上获取代理IP,这里以站大爷代理为例,代码如下:

import requests
from bs4 import BeautifulSoup

def get_proxy():
    url = 'https://www.zdaye.com/free/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    table = soup.find('table', attrs={'id': 'ip_list'})
    proxies = []
    for row in table.tbody.find_all('tr'):
        if row.find_all('td')[4].string == 'HTTP':
            proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
            proxies.append(proxy)
    return proxies

上面的代码中,我们使用requests库访问站大爷代理网站,获取网页内容。然后,使用BeautifulSoup库解析网页内容,获取代理IP信息。

获取到代理IP后,我们需要测试这些代理IP是否可用,筛选出可用的代理IP。代码如下:

import requests

def test_proxy(proxy):
    url = 'https://www.baidu.com'
    proxies = {'http': 'http://' + proxy, 'https': 'https://' + proxy}
    try:
        r = requests.get(url, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return True
        else:
            return False
    except:
        return False

def get_valid_proxies(proxies):
    valid_proxies = []
    for proxy in proxies:
        if test_proxy(proxy):
            valid_proxies.append(proxy)
    return valid_proxies

在上面的代码中,我们使用requests库通过代理IP访问百度网站,如果返回状态码为200,则说明代理IP可用。如果访问出现异常或者状态码不为200,则说明代理IP不可用。

获取到可用的代理IP后,我们就可以使用这些代理IP来访问指定的网站。代码如下:

import random
import requests

def get_html(url, proxies):
    proxy = random.choice(proxies)
    proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    try:
        r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return r.text
        else:
            return None
    except:
        return None

上面的代码中,我们使用random库随机选择一个代理IP,然后使用requests库访问指定的网站。在访问时,需要将代理IP添加到proxies参数中,这样就可以使用代理IP来访问指定的网站了。

四、完整代码

import random
import requests
from bs4 import BeautifulSoup

def get_proxy():
    url = 'https://www.zdaye.com/free/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    table = soup.find('table', attrs={'id': 'ip_list'})
    proxies = []
    for row in table.tbody.find_all('tr'):
        if row.find_all('td')[4].string == 'HTTP':
            proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
            proxies.append(proxy)
    return proxies

def test_proxy(proxy):
    url = 'https://www.baidu.com'
    proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    try:
        r = requests.get(url, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return True
        else:
            return False
    except:
        return False

def get_valid_proxies(proxies):
    valid_proxies = []
    for proxy in proxies:
        if test_proxy(proxy):
            valid_proxies.append(proxy)
    return valid_proxies

def get_html(url, proxies):
    proxy = random.choice(proxies)
    proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    try:
        r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return r.text
        else:
            return None
    except:
        return None

if __name__ == '__main__':
    url = 'https://www.baidu.com'
    proxies = get_proxy()
    valid_proxies = get_valid_proxies(proxies)
    html = get_html(url, valid_proxies)
    print(html)

在上面的代码中,我们首先定义了一个函数get_proxy(),用于获取代理IP。然后,定义了一个函数test_proxy(),用于测试代理IP是否可用。接下来,定义了一个函数get_valid_proxies(),用于获取可用的代理IP。最后,定义了一个函数get_html(),用于使用代理IP访问指定的网站,并返回HTML内容。

在主函数中,我们先访问西刺代理网站,获取代理IP信息。然后,使用get_valid_proxies()函数获取可用的代理IP。最后,使用get_html()函数访问百度网站,并输出返回内容。

总结

以上就是关于Python爬虫代理IP设置proxies的介绍,包括代理IP的概念、代理IP的设置和使用方法。在实际爬虫开发中,使用代理IP可以避免IP封禁和反反爬虫等问题,提高爬虫的效率和稳定性。

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

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

相关文章

微软允许OEM对Win10不提供关闭Secure Boot

用户可能将无法在Windows 10电脑上安装其它操作系统了,微软不再要求OEM在UEFI 中提供的“关闭 Secure Boot”的选项。 微软最早是在Designed for Windows 8认证时要求OEM的产品必须支持UEFI Secure Boot。Secure Boot 被设计用来防止恶意程序悄悄潜入到引导进程。问…

高版本模拟器安装burp证书

一、下载burp证书,安装openssl http://burp自己找官网安装opensslWin32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com)二、查看模拟器端口并连接 adb devices openssl x509 -inform der -in cacert.der -out burp.pem openssl…

一分多行列转换

问题描述: 将以下表方式存放的数据: 转换成如下方式存放: 1、 建表语句及插入测试数据 --建表语句 create table INFC_C_GUARANTOR_NISJ (CUST_NO VARCHAR2(30),BAIL_ACCT_NO VARCHAR2(2000) ); create table INFC_C_GUARANTOR_NISJ_N…

重复性工作自动化解决方案——影刀

以前,影刀是一个邂逅的初见小工具,新奇在里头,踌躇在外头; 现在,影刀是一个稳定的职场贾维斯,高效在里头,悠闲在外头; 以后,影刀是一个潜力的知己老司机,有序…

ROS 通信机制

ROS是一个分布式框架,为用户提供多节点(进程)之间的通信服务,所有软件和功能都建立在这种分布式通信机制上,ROS的通信机制是最底层也是最核心的技术。 一、话题通信机制 话题在 ROS 中使用最为频繁,其通信…

Python实现WOA智能鲸鱼优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

【VECTOR】:CAN OE Alyzer使用

CAN OE Alyzer使用 工程搭建新建工程DBC文件导入插入IG模块Trace查看录制Logger回放Trace 实际应用将需要回放报文的导出需要报文添加导出的报文,回放添加诊断CDD 工程搭建 新建工程 配置硬件1:通道数量选择(根据使用情况而定) 硬…

Swift爬虫程序

以下是一个简单的Swift爬虫程序,用于从前程无忧深圳地区招聘财务、会计的数据爬取数据: import Foundation import SwiftSoup// 创建一个请求对象,指定代理信息 var request URLRequest(url: URL(string: "https://www.51job.com/zh/c…

Machine-Level Programming III:Procedure

Machine-Level Programming III:Procedure Today Procedures Mechanisms(机制)Stack StructureCalling Conventions(调用规则) Passing control(传递控制)Passing data(传递数据)Managing local data Illustration of Recursion(递归说明) 补充术语: Program 程序…

Haskell添加HTTP爬虫ip编写的爬虫程序

下面是一个简单的使用Haskell编写的爬虫程序示例,它使用了HTTP爬虫IP,以爬取百度图片。请注意,这个程序只是一个基本的示例,实际的爬虫程序可能需要处理更多的细节,例如错误处理、数据清洗等。 import Network.HTTP.Cl…

【中间件篇-Redis缓存数据库08】Redis设计、实现、redisobject对象设计、多线程、缓存淘汰算法

Redis的设计、实现 数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合),但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的…

hadoop 虚拟机配置大数据环境 hadoop(二)

1. 安装epel-release 注:Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS 和Scientific Liux。相当于是一个软件仓库,大多数rpm 包在官方repository 中是找不到的) 命令: yum install -y epel-relea…

swagger精度丢失,postman调用正常,dameng数据库,long类型字段

问题出现 我们目前在迁移环境,然后往另带一个公司提供的框架里面迁移,然后就出现了很多问题,一个问题是我们返回的某个列表数据,在使用postman 的时候调用正常,但是当前端在制作页面的时候出现问题,并且sw…

一文带你深度体验DevChat

目录 🚀DevChat基本介绍 🕍 概述 🕍 优势 🕍 功能概述 🚀DevChat的安装 🕍 安装依赖软件 🕍 VS Code安装插件 🕍 获取和设置Access Key 🕍 版本不兼容处理【BU…

Linux系统中如何开启和配置OpenGauss数据库的远程连接(1)

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

【python自动化】Playwright基础教程(六)事件操作③单击双击计数过滤截图JS注入

【python自动化】Playwright基础教程(六)事件操作③单击&双击&计数&过滤&截图&JS注入 本文目录 文章目录 【python自动化】Playwright基础教程(六)事件操作③单击&双击&计数&过滤&截图&JS注入playwright系列回顾前文代码点击 - click…

Git忽略文件.gitignore的使用

1.为什么使用? 当你使用git add .的时候有没有遇到把你不想提交的文件也添加到了缓存中去?比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务…

arcgis--消除坐标系信息的两种方法

方法一:在【目录】中右击待修改数据,选择【属性】,选择【XY坐标】选项卡,点击清楚按钮。 方法二:在【数据管理工具】-【投影与变换】-【定义投影】中清楚坐标系信息。如下:

每日一题:逆波兰表达式求值(后缀表达式)

这个题比较难理解的就是逆波兰表达式是什么东西,上面我贴了定义,这个题本身不难,只需要运用迭代器逐个访问,当为数字是存入栈中,是算符时就要取数出来进行运算,先取出的是右操作数,取出来以后用…

【done】剑指offer46_new:解密数字

题目:力扣165,https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/description/ 现有一串神秘的密文 ciphertext,经调查,密文的特点和规则如下: 密文由非负整数组成 数字 0-25 分别对应字母 a-z 请…