网络爬虫最常遇到的反爬措施是限制用户IP的一段时间内的访问次数,也就是说同一IP地址在短时间内频繁多次地访问目标网站,网站可能会针对此IP地址进行限制或封禁。在采集数据时对于这种情况,通常会使用代理来伪装本地IP进行访问,若需要大量获取某一目标数据,就需要建立具有一定数量代理IP的代理池,从而批量任意选取IP进行伪装访问。

### 1.用代理进行访问

为了能够使用代理进行访问,我们首先需要获得一个有效代理,代理一般有免费和付费两种。免费的代理由于使用次数多,来源不可靠等因素,多数情况下并不稳定,付费的代理相对来说就稳定和可靠很多,使用质量也有所保证,因此通常情况下大家都是使用付费代理。代理的使用通常也可分为两种,全局代理和局部代理。所谓全局代理,也就是使物理设备整体的网络访问都经过代理,这样网络采集代码不需要做任何修改,就可以实现伪装访问。但通常情况下,一个代理IP的有效性时间有限,而且若是目标网站限制严重,就需要频繁切换代理,这样一来全局代理在网络爬虫时就不适用了。对此我们可以利用代码实现局部或单次的代理访问,从而满足大量访问的需求。

假设我们获取了一条有效的代理:111.222.33.144:80,我们尝试使用这条代理进行访问

```python

import requests

url = 'http://httpbin.org/get'

proxy = '111.222.33.144:80'

proxies = {

'http': 'http://' + proxy,

'https':'https://' + proxy,

}

try:

response = requests.get(url,proxies=proxies)

print(response.text)

except Exception as e:

print(e)

```

运行结果:

```python

{

"args": {},

"headers": {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",

"Accept-Encoding": "gzip, deflate",

"Accept-Language": "zh-CN,zh;q=0.9",

"Host": "httpbin.org",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "python-requests/2.22.0",

},

"origin": "111.222.33.144, 111.222.33.144",

"url": "https://httpbin.org/get"

}

```

如果获取到的结果与我们使用的代理一致,则说明我们成功使用此代理进行了一次请求。

若使用SOCKS5,我们需要安装具有socks功能的requests,

```bash

pip3 install requests[socks]

```

之后只需将代理字典中的'http://'和'https://'改成'socks5://'即可,其他步骤不变。

```python

proxies = {

'http': 'socks5://' + proxy,

'https':'socks5://' + proxy,

}

```

### 2.建立代理池

学会了使用代理,接下来让我们建立一个代理池,以实现批量的伪装访问。

- 首先,我们需要批量获取代理IP,假设我们通过付费代理,批量获取了一批代理IP,并保存到Redis数据库中。

```python

import redis

# 获取到的代理IP

proxies = [

'180.247.183.48:9999',

'106.56.247.152:8888',

'115.151.131.99:7777',

'106.56.244.233:6666',

'112.72.109.148:5555',

'106.56.246.75:4444',

'115.72.99.122:3333',

'180.107.214.26:2222',

'106.52.246.43:1111',

'115.148.23.245:8000',

]

# 连接Redsi数据库

db = redis.StrictRedis(host='localhost',port=6379,db=0)

# 设置Key名

REDIS_KEY = 'my_proxies'

# 将获取到的IP保存进Redsi数据库

for proxy in proxies:

db.sadd(REDIS_KEY,proxy)

print("Proxies: ", db.scard(REDIS_KEY))

```

接着我们需要验证获取的代理IP是否都可用,将可用的保留,不可用的剔除,通常来说每隔一段时间就需要检测一次。```python

import requests

import redis

# 连接Redis数据库

db = redis.StrictRedis(host='localhost',port=6379,db=0)

REDIS_KEY = 'my_proxies'

proxies = db.smembers(REDIS_KEY)

# 测试IP的网站

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

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3729.157 Safari/537.36'}

# 遍历所有获取的IP,访问测试网址

for ip in proxies:

proxy = {

'http': 'http://' + proxy,

'https':'https://' + proxy,

}

try:

response = requests.get(test_url,headers=headers,proxies=proxy)

if not response.status_code == 200:

db.srem(REDIS_KEY,ip)

except Exception as e:

print(e)

```

最后,我们就可以随机放心地使用代理访问目标网站了

```python

import requests

import redis

db = redis.StrictRedis(host='localhost',port=6379,db=0)

REDIS_KEY = 'my_proxies'

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

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3729.157 Safari/537.36'}

proxy = db.spop(REDIS_KEY)

proxies = {

'http': 'http://' + proxy,

'https':'https://' + proxy,

}

# 使用代理访问目标网站

try:

response = requests.get(target_url,headers=headers,proxies=proxies)

print(response.text)

except Exception as e:

print(e)

```

支持全球240个国家地区,每日超9000万住宅动态IP资源,欢迎访问:www.ipidea.net。

python爬虫构建国外代理池_Ipidea丨构建Python网络爬虫代理池相关推荐

  1. MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之框架(第4周)

    MOOC<Python网络爬虫和信息提取>(第11次)网络爬虫之框架(第4周) MOOC–Python网络爬虫和信息提取(第11次开课) 网络爬虫之框架 21.08.10 目录 文章目录 ...

  2. Python 网络爬虫从0到1 (2):网络爬虫的特性、问题与规范

      网络爬虫的发展为使用者了解和收集网络信息提供便利的同时,也带来了许多大大小小的问题,甚至对网络安全造成了一定危害.所以,在真正开始了解网络爬虫之前,我们也需要先了解一下网络爬虫的特性.带来的问题以 ...

  3. 了解爬虫的风险与以及如何规避风险-Java网络爬虫系统性学习与实战系列(3)

    了解爬虫的风险与以及如何规避风险-Java网络爬虫系统性学习与实战系列(3) 文章目录 概述 法律风险 民事风险 刑事风险 个人信息的法律风险 著作权的风险(文章.图片.影视等数据) 5不要 3准守 ...

  4. python网络爬虫从入门到实践第2版pdf-Python网络爬虫从入门到实践 第2版

    前言 第1章 网络爬虫入门1 1.1 为什么要学网络爬虫2 1.1.1 网络爬虫能带来什么好处2 1.1.2 能从网络上爬取什么数据3 1.1.3 应不应该学爬虫3 1.2 网络爬虫是否合法3 1.2 ...

  5. python网络爬虫的第三方库_Python常用第三方库_网络爬虫、数据分析与WEB开发、机器学习...

    Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...

  6. [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析

    更新:感谢评论中朋友的提醒,百度贴吧现在已经改成utf-8编码了吧,需要把代码中的decode('gbk')改成decode('utf-8'). 百度贴吧的爬虫制作和糗百的爬虫制作原理基本相同,都是通 ...

  7. python爬虫从入门到实践pdf百度云_PYTHON网络爬虫从入门到实践.pdf

    推荐序 推荐序二 前言 前言二 第1章网络爬虫入门 1.1为什么要学网络爬虫 1.1.1网络爬虫能带来什么好处 1.1.2能从网络上爬取什么数据 1.1.3应不应该学爬虫 1.2网络爬虫是否合法 1. ...

  8. python网络爬虫网易云音乐_手把手教你写网络爬虫(1):网易云音乐歌单

    大家好,<手把手教你写网络爬虫>连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意.本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻 ...

  9. python爬虫是什么概述_通俗的讲,网络爬虫到底是什么?

    且听小宅来分享分享: 我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之 ...

  10. Python 实现的下载op海贼王网的图片(网络爬虫)

    没得事就爬一下我喜欢的海贼王上的图片 须要在d盘下建立一个imgcache目录 # -*- coding: utf-8 -*-import urllib import urllib2import js ...

最新文章

  1. 《数据科学家养成手册》第十一章----算法学(非线性回归)
  2. Matlab编程序设计数字滤波器
  3. JZOJ 5602. 【NOI2018模拟3.26】Cti JZOJ 5057. 【GDSOI2017模拟4.13】炮塔
  4. NOIP 2011 Day2
  5. Go Concurrency Patterns: Context
  6. 战网下载CDN重定向失败_卧槽,又开源一个下载神器,利用各种平台下载任意文件...
  7. 【Kafka】Kafka 镜像 Kafka mirroring (MirrorMaker)
  8. 升级到ASP.NET2.0之后的疑问
  9. linux设置服务开机自启动
  10. 显卡和主板供电接详解图解
  11. python画行向日葵_如何用Python画一朵太阳花
  12. tomcat 配置 数据库连接池
  13. js 点击文本框,预览选择图片
  14. Word文件如何查看字数
  15. typename的起源与用法
  16. KCL 论文被 SETTA 2022 会议录用
  17. 如何在 Ubuntu 中加密硬盘
  18. dz php7.1语言包,discuz 插件语言包
  19. 【C++】面向对象之封装篇(下)
  20. 图解:什么是红黑树?(下篇)

热门文章

  1. Stanford机器人D-H坐标系
  2. Nebula Graph - 集群模式部署
  3. 蓝兔子现在有一个字符串,如果一个字符串从左向右看和从右向左看是一样的,则称为回文串。请编写程序,帮助蓝兔子判断输入的字符串是否是回文串。
  4. 日期格式 Wed Oct 16 00:00:00 CEST 2020 转换
  5. apache 二级域名设置完整步骤
  6. Infor CloudSuite Industrial (SyteLine) IDO 行授权 设置
  7. 梦殇 chapter two
  8. 案例|双循环下的国货自信:波司登抵御寒冬的新战袍
  9. 数字信号处理——有限长离散变换
  10. 2019 NLP大全:论文、博客、教程、工程进展全梳理(长文预警)