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

目录

前言

一、什么是代理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 BeautifulSoupdef 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 requestsdef 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 Trueelse:return Falseexcept:return Falsedef 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 requestsdef 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.textelse:return Noneexcept:return None

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

四、完整代码

import random
import requests
from bs4 import BeautifulSoupdef 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 proxiesdef 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 Trueelse:return Falseexcept:return Falsedef get_valid_proxies(proxies):valid_proxies = []for proxy in proxies:if test_proxy(proxy):valid_proxies.append(proxy)return valid_proxiesdef 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.textelse:return Noneexcept:return Noneif __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.hqwc.cn/news/171397.html

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

相关文章

5 新的关键字

动态内存分配 回想C语言中,动态内存是怎么分配的?通过C库里面的malloc free去进行动态内存分配。 C通过new关键字进行动态内存申请,动态内存申请是基于类型进行的。 delete 关键字用于内存释放。 //变量申请 type* pointer new type; dele…

本地化小程序运营 同城小程序开发

时空的限制让本地化的线上平台成为一种追求,58及某团正式深挖人们城镇化、本地化的信息和商业需求而崛起的平台,将二者结合成本地化小程序,显然有着巨大的市场机会。本地化小程序运营可以结合本地化生活需求的一些信息,以及激发商…

pid调参(实验室新人入门)

安装keil:下载MDK-ARM http://t.csdnimg.cn/yYF7W芯片包: https://www.keil.arm.com/devices/stmicroelectronics-stm32f429aghx/features/ 调参软件: https://blog.csdn.net/weixin_63568691/article/details/133606043调参方法:…

解决Mac配置maven环境后,关闭终端后环境失效的问题(适用于所有终端关闭后环境失效的问题)

目录 问题的原因 解决方式一、每次打开终端时输入:"source ~/.bash_profile",这个方式比较繁琐 解决方式二、我们终端输入"vim ~/.zshrc"打开".zshrc"文件 1、我们输入以下代码: 2、首先需要按 " i…

字符设备驱动基础框架

一、总体框架 1.Linux字符设备驱动工作原理图 2.驱动使用端 3.驱动实现端 二、各部分详解 1.VFS层 1) inode结构体 在Unix/Linux操作系统中,每个文件都由一个inode(索引节点)来索引。inode是特殊的磁盘块,它们在文件系统创建时…

20.有效的括号(LeetCode)

思路:用栈的后进先出的特性,来完成题目的要求 因为C有库,可以直接用,而C语言没有,所以我们直接把写好的栈拷贝上来用。 首先,完成框架的搭建 其次,再实现循环内的部分。1.左括号入栈 2.右括…

安装 Lua 的 HTTP 库

首先,你需要安装 Lua 的 HTTP 库。可以使用 LuaRocks 来安装。以下是安装命令: luarocks install http然后,你可以使用以下代码来爬取网页内容: local http require http-- 设置代理信息 http.set_proxy(jshk.com.cn)-- 网页UR…

【解决】conda-script.py: error: argument COMMAND: invalid choice: ‘activate‘

运行conda activate base报错: 试了网上找到的解决方法都不行: 最后切换了一下terminal: 从powershell改回cmd(不知道为什么一开始手贱换成powershell) 就可以了

手机厂商参与“百模大战”,vivo发布蓝心大模型

在2023 vivo开发者大会上,vivo发布自研通用大模型矩阵——蓝心大模型,其中包含十亿、百亿、千亿三个参数量级的5款自研大模型,其中,10亿量级模型是主要面向端侧场景打造的专业文本大模型,具备本地化的文本总结、摘要等…

高频SQL50题(基础题)-5

文章目录 主要内容一.SQL练习题1.602-好友申请:谁有最多的好友代码如下(示例): 2.585-2016年的投资代码如下(示例): 3.185-部门工资前三高的所有员工代码如下(示例): 4.1667-修复表中的名字代码…

Android图形系统之X11、Weston、Wayland、Mesa3D、ANGLE、SwiftShader介绍(十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【PG】PostgreSQL 预写日志(WAL)、checkpoint、LSN

目录 预写式日志(WAL) WAL概念 WAL的作用 WAL日志存放路径 WAL日志文件数量 WAL日志文件存储形式 WAL日志文件命名 WAL内容 检查点(checkpoint) 1 检查点概念 2 检查点作用 触发检查点 触发检查点之后数据库操作 设置合…