python爬虫构建国外代理池_Ipidea丨构建Python网络爬虫代理池
网络爬虫最常遇到的反爬措施是限制用户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网络爬虫代理池相关推荐
- MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之框架(第4周)
MOOC<Python网络爬虫和信息提取>(第11次)网络爬虫之框架(第4周) MOOC–Python网络爬虫和信息提取(第11次开课) 网络爬虫之框架 21.08.10 目录 文章目录 ...
- Python 网络爬虫从0到1 (2):网络爬虫的特性、问题与规范
网络爬虫的发展为使用者了解和收集网络信息提供便利的同时,也带来了许多大大小小的问题,甚至对网络安全造成了一定危害.所以,在真正开始了解网络爬虫之前,我们也需要先了解一下网络爬虫的特性.带来的问题以 ...
- 了解爬虫的风险与以及如何规避风险-Java网络爬虫系统性学习与实战系列(3)
了解爬虫的风险与以及如何规避风险-Java网络爬虫系统性学习与实战系列(3) 文章目录 概述 法律风险 民事风险 刑事风险 个人信息的法律风险 著作权的风险(文章.图片.影视等数据) 5不要 3准守 ...
- 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 ...
- python网络爬虫的第三方库_Python常用第三方库_网络爬虫、数据分析与WEB开发、机器学习...
Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
更新:感谢评论中朋友的提醒,百度贴吧现在已经改成utf-8编码了吧,需要把代码中的decode('gbk')改成decode('utf-8'). 百度贴吧的爬虫制作和糗百的爬虫制作原理基本相同,都是通 ...
- python爬虫从入门到实践pdf百度云_PYTHON网络爬虫从入门到实践.pdf
推荐序 推荐序二 前言 前言二 第1章网络爬虫入门 1.1为什么要学网络爬虫 1.1.1网络爬虫能带来什么好处 1.1.2能从网络上爬取什么数据 1.1.3应不应该学爬虫 1.2网络爬虫是否合法 1. ...
- python网络爬虫网易云音乐_手把手教你写网络爬虫(1):网易云音乐歌单
大家好,<手把手教你写网络爬虫>连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意.本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻 ...
- python爬虫是什么概述_通俗的讲,网络爬虫到底是什么?
且听小宅来分享分享: 我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之 ...
- Python 实现的下载op海贼王网的图片(网络爬虫)
没得事就爬一下我喜欢的海贼王上的图片 须要在d盘下建立一个imgcache目录 # -*- coding: utf-8 -*-import urllib import urllib2import js ...
最新文章
- 《数据科学家养成手册》第十一章----算法学(非线性回归)
- Matlab编程序设计数字滤波器
- JZOJ 5602. 【NOI2018模拟3.26】Cti JZOJ 5057. 【GDSOI2017模拟4.13】炮塔
- NOIP 2011 Day2
- Go Concurrency Patterns: Context
- 战网下载CDN重定向失败_卧槽,又开源一个下载神器,利用各种平台下载任意文件...
- 【Kafka】Kafka 镜像 Kafka mirroring (MirrorMaker)
- 升级到ASP.NET2.0之后的疑问
- linux设置服务开机自启动
- 显卡和主板供电接详解图解
- python画行向日葵_如何用Python画一朵太阳花
- tomcat 配置 数据库连接池
- js 点击文本框,预览选择图片
- Word文件如何查看字数
- typename的起源与用法
- KCL 论文被 SETTA 2022 会议录用
- 如何在 Ubuntu 中加密硬盘
- dz php7.1语言包,discuz 插件语言包
- 【C++】面向对象之封装篇(下)
- 图解:什么是红黑树?(下篇)
热门文章
- Stanford机器人D-H坐标系
- Nebula Graph - 集群模式部署
- 蓝兔子现在有一个字符串,如果一个字符串从左向右看和从右向左看是一样的,则称为回文串。请编写程序,帮助蓝兔子判断输入的字符串是否是回文串。
- 日期格式 Wed Oct 16 00:00:00 CEST 2020 转换
- apache 二级域名设置完整步骤
- Infor CloudSuite Industrial (SyteLine) IDO 行授权 设置
- 梦殇 chapter two
- 案例|双循环下的国货自信:波司登抵御寒冬的新战袍
- 数字信号处理——有限长离散变换
- 2019 NLP大全:论文、博客、教程、工程进展全梳理(长文预警)