代理相关

0x01 回顾

代理,分为正向,反向;正向呢,一般用于隐藏客户端,反向隐藏服务端。

当IP被列为黑名单时,使用代理技术,即通过其它可用IP,可以继续访问

为了自动化,这里有一个代理池的概念;一般公共代理池又很容易检测到,所以有的平台会出售代理服务,而且人性化地配备了几min就自动更换一次Ip的请求。

这里主要是想用代码角度,去了解这种知识

0x02

代理池也是一种反爬虫的手段;参考了一些现有爬虫项目,可以看出

针对代理池,一般是通过爬虫去爬取免费的代理数据,检查可用性,从而放进数据库中。

代理常见的形式是http://ip:port,用过burpsuite的一般在浏览器或者相关设置上来一个如http://127.0.0.1:1234

这样的话,流量途径:浏览器请求->代理->目标页面

下面是一种常见的单ip代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests

# 要访问的网页URL
url = 'http://httpbin.org/ip'

# 代理服务器地址
proxy_url = 'http://127.0.0.1:2080'

try:
# 发送带有代理的请求
response = requests.get(url, proxies={'http': proxy_url, 'https': proxy_url})

# 检查请求是否成功
if response.status_code == 200:
print("代理成功,网页内容为:")
print(response.text)
else:
print("无法获取网页内容,状态码:", response.status_code)
except requests.exceptions.RequestException as e:
print("请求发生异常:", e)

主要原理就是去访问一个能检测当前IP的网址,查看回显情况。但这里是通过连接到客户端的形式,不能随意切换IP

如果是一般多IP的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import requests

# 可用的代理节点列表
proxy_list = [
'http://proxy1_ip:proxy1_port',
'http://proxy2_ip:proxy2_port',
# 添加更多代理节点
]

# 要访问的网页URL
url = 'http://example.com'

try:
# 遍历代理节点列表
for proxy in proxy_list:
# 发送带有当前代理节点的请求
response = requests.get(url, proxies={'http': proxy, 'https': proxy})

# 检查请求是否成功
if response.status_code == 200:
print(f"成功获取网页内容,使用代理节点:{proxy}")
print(response.text)
break # 如果成功获取到网页内容,则停止遍历
else:
print(f"无法获取网页内容,状态码:{response.status_code},尝试下一个代理节点")
except requests.exceptions.RequestException as e:
print("请求发生异常:", e)

就是遍历访问,如果成功获取就退出遍历

对于一个代理网站的爬取过程:

访问目标站->根据目标站实际显示情况(html还是表格)->正则取出IP信息->存入数据库

数据库调用该代理的原则:

按分数排序,初始有最大分值,每次使用时,该代理反馈的情况不好,就减1,反之加1;所以取代理的方式就是,第一次取分高的,第二次次之,最后随便了

点到为止,这种技术不好细究

参考

https://github.com/fengzhizi715/ProxyPool

https://github.com/chenjiandongx/async-proxy-pool

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信