代理的作用

网上有许多售卖代理的网站,也有免费的,不过其功效性会能影响。通过代理网站,我们可以向访问的目标访问器隐藏自己的真实ip,避免ip地址以访问频率过高等原因被封。

步骤

1.搜集一个免费的代理

2.通过urllib.requestProxyHandler构造一个代理,以字典形式,键名是协议

proxy = '95.45.235.178:40056'
proxy_handler = ProxyHandler({
'http': 'http://'+proxy,
'https': 'https://'+proxy
})

3.通过urllib.requestbuild_opener构造一个请求方法

opener = build_opener(proxy_handler)

4.发起请求

from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener proxy = '95.45.235.178:40056'
# 如果代理需要登录,则可以这样写
# proxy = 'username:password@95.45.235.178:40056
proxy_handler = ProxyHandler({
'http': 'http://'+proxy,
'https': 'https://'+proxy
})
opener = build_opener(proxy_handler)
try:
response = opener.open('http://httpbin.org/get')
print(response.read().decode("utf-8"))
except URLError as e:
print(e.reason)

完整代码

from lxml import etree
from time import sleep
import requests
from requests.exceptions import ProxyError, ConnectTimeout, ReadTimeout headers = {
'User-Agent': ('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
' (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'),
} # 0 1 2 .... 代表权重,9表示可用,0表示不可用
ip_poor = {
0: [], 1: []
} # 爬取免费 ip
def crawl_ip():
ip_list = []
for page in range(1, 11):
response = requests.get("https://www.kuaidaili.com/free/inha/{}/".format(page))
response.encoding = 'utf-8'
html = etree.HTML(response.text)
ip = html.xpath('//*[@id="list"]/table/tbody/tr/td[1]/text()')
port = html.xpath('//*[@id="list"]/table/tbody/tr/td[2]/text()')
ip_list.append([i[0]+':'+i[1] for i in zip(ip, port)])
sleep(2)
return ip_list # 测试 ip 的可用性
def test_ip(ip_addr):
proxies = {
'http': 'http://'+ip_addr,
'https': 'https://'+ip_addr,
}
try:
resp = requests.get('http://httpbin.org/get', proxies=proxies, headers=headers, timeout=5)
return True
except (ProxyError, ConnectTimeout, ReadTimeout):
return False # 测试入口
def test():
# while True:
use = [ip for ip in ip_poor[1]]
for ip in use:
if test_ip(ip) is False:
ip_poor[0].append(ip)
ip_poor[1].pop(ip_poor[1].index(ip))
not_use = [ip for ip in ip_poor[0]]
for ip in not_use:
if test_ip(ip) is False:
ip_poor.pop(ip_poor[0].index(ip))
else:
ip_poor[1].append(ip)
ip_poor.pop(ip_poor[0].index(ip))
return ip_poor def main():
ip_list = crawl_ip()
for item in ip_list:
for i in item:
ip_poor[1].append(i)
test() if __name__ == '__main__':
main()

ip代理池学习的更多相关文章

  1. Scrapy学习-13-使用DownloaderMiddleware设置IP代理池及IP变换

    设置IP代理池及IP变换方案 方案一: 使用国内免费的IP代理 http://www.xicidaili.com # 创建一个tools文件夹,新建一个py文件,用于获取代理IP和PORT from ...

  2. 爬取西刺ip代理池

    好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...

  3. Python爬虫之ip代理池

    可能在学习爬虫的时候,遇到很多的反爬的手段,封ip 就是其中之一. 对于封IP的网站.需要很多的代理IP,去买代理IP,对于初学者觉得没有必要,每个卖代理IP的网站有的提供了免费IP,可是又很少,写了 ...

  4. 5 使用ip代理池爬取糗事百科

    从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...

  5. python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)

    在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...

  6. python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会

    我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...

  7. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...

  8. Scrapy加Redis加IP代理池实现音乐爬虫

    音乐爬虫 关注公众号"轻松学编程"了解更多. 目的:爬取歌名,歌手,歌词,歌曲url. 一.创建爬虫项目 创建一个文件夹,进入文件夹,打开cmd窗口,输入: scrapy star ...

  9. 开源IP代理池续——整体重构

    开源IP代理池 继上一篇开源项目IPProxys的使用之后,大家在github,我的公众号和博客上提出了很多建议.经过两周时间的努力,基本完成了开源IP代理池IPProxyPool的重构任务,业余时间 ...

随机推荐

  1. POJ 2891 Strange Way to Express Integers 中国剩余定理解法

    一种不断迭代,求新的求余方程的方法运用中国剩余定理. 总的来说,假设对方程操作.和这个定理的数学思想运用的不多的话.是非常困难的. 參照了这个博客的程序写的: http://scturtle.is-p ...

  2. 上机题目(0基础)- 数据库事务(Java)

    /* * 文件名称:JDBCTestCase.java * 版权:Copyright 2006-2011 Huawei Tech. Co. Ltd. All Rights Reserved. * 描写 ...

  3. Spring+Mybatis之注册功能demo

    这次先注册功能的是基于登录之后,所以很多配置,实体类等就不再赘述了. 首先也不是直接在地址栏输入一个网页就可以到注册页面的.而是需要通过后台发送一个请求从而跳转到注册页面 先写注册页面,body部分 ...

  4. oc56--ARC多个对象的内存管理

    // main.m // ARC中多个对象的内存管理:ARC的内存管理就是MRC的内存管理(一个对象释放的时候,必然会把它里面的对象释放),只不过一个是Xcode加的代码,一个是我们自己加的代码: / ...

  5. ubuntu 关机命令

    ubuntu 关机命令 关机命令 shutdown ubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令. 1)shut ...

  6. 电脑升级win10后visio的问题

    上周由于电脑意外蓝屏,系统从win7升级到了win10,昨天工作写文档时才发现缺少画图的工具,于是按照了visio2013,在编辑设计图时发现,一旦用visio打开或编辑图后再到word里设计图的内容 ...

  7. 杂项:ASP.NET Web API

    ylbtech-杂项:ASP.NET Web API ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web A ...

  8. Django day05 虚拟环境 django 2.0和django 1.0 路由层区别

    一:虚拟环境 创建虚拟环境一般有三种方式: 1)   File--->New Project--> 出现如下图,点击Project Interpreter:New Virtualenv e ...

  9. Android PopWindow的替代品BasePopup

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/109 背景描述 最近一段时间,又看到了这个开源项目Base ...

  10. BZOJ 3681 线段树合并+网络流

    思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...