各大免费IP的网站的反爬手段往往是封掉在一定时间内访问过于频繁的IP,因此在爬取的时候需要设定一定的时间间隔,不过说实话,免费代理很多时候基本都不能用,可能一千个下来只有十几个可以用,而且几分钟之后估计也扑街了。虽然有那种付费的大量代理IP,但是也不见得好,测试过,里面优质的也很少。目前体验比较好的还是私密代理,当然还有其他。贵有贵的道理。

import requests
import time
import random
from fake_useragent import UserAgentfrom requests.exceptions import RequestException
from lxml import etree
import csv class IPSpider(object):
def __init__(self):
self.url = 'https://www.kuaidaili.com/free/inha/'
self.url_test = 'http://www.baidu.com/' # 直接拿百度来测试IP能不能用 def get_headers(self):
"""
随机产生请求头
:return:
"""
ua = UserAgent()
headers = {
'User-Agent': ua.random
}
return headers def get_page(self, url):
"""
获取网页源代码
:param url:
:return:
"""
while True:
try:
headers = self.get_headers()
response = requests.get(url, headers=headers, verify=False)
if response.status_code == 200:
return response.text
print(response.status_code)
raise ValueError("打开网页错误")
except RequestException as err:
print(err) def parse_ip(self, text):
"""
提取页面的IP和端口号
:param text:
:return:
"""
html = etree.HTML(text)
ip = html.xpath("//tr/td[1]/text()")
print(ip)
port = html.xpath("//tr/td[2]/text()")
print(port)
return zip(ip, port) def test_ip(self, ip, port):
"""
测试IP是否可用
:param ip:
:param port:
:return:
"""
try:
# url_ip = 'http://' + ip + ':' + port
# proxies = {
# 'http': url_ip,
# 'https': url_ip
# }
proxies = {
'http': 'http://{}:{}'.format(ip, port),
'https': 'https://{}:{}'.format(ip, port),
}
headers = self.get_headers()
response = requests.get(url=self.url_test, headers=headers, proxies=proxies, timeout=8)
if response.status_code == 200:
print("%s可用" % ip)
return ip, port
return None
except RequestException:
print('%s失效' % ip) def save_ip(self, result):
"""
可用的IP保存
:param result:
:return:
"""
with open("kuaidailiip.csv", "a")as f:
writer = csv.writer(f)
writer.writerows(result) def run(self):
"""
主函数
:return:
"""
for i in range(1, 1001):
url = self.url + str(i) + '/'
text = self.get_page(url)
ip = self.parse_ip(text)
result = []
for j in ip:
ok_ip = self.test_ip(j[0], j[1])
if ok_ip == None:
continue
else:
result.append(ok_ip)
self.save_ip(result)
time.sleep(random.randint(5, 7))
if __name__ == '__main__':
  spider = IPSpider()
  spider.run()

爬取快代理的免费IP并测试的更多相关文章

  1. 爬取软考试题系列之ip自动代理

    马上5月份有个软件专业等级考试,以下简称软考,为了更好的复习备考,我打算抓取www.rkpass.com网上的软考试题. 以上为背景. 很久没有更新博客园的博客了,所以之前的代码没有及时的贴出来,咱们 ...

  2. Python 爬虫练习(一) 爬取国内代理ip

    简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ...

  3. 爬取掌阅app免费电子书数据

    主要介绍如何抓取app数据及抓包工具的使用,能看到这相信你已经有爬虫基础了 编不下去了,主要是我懒,直接开干吧! 一.使用环境和工具 windows + python3 + Jsonpath + Ch ...

  4. Selenium&PhantomJS 完成爬取网络代理

    Selenium模块是一套完整的Web应用程序测试系统,它包含了测试的录制(SeleniumIDE).编写及运行(Selenium Remote Control)和测试的并行处理(Selenimu G ...

  5. python requests库爬取网页小实例:ip地址查询

    ip地址查询的全代码: 智力使用ip183网站进行ip地址归属地的查询,我们在查询的过程是通过构造url进行查询的,将要查询的ip地址以参数的形式添加在ip183url后面即可. #ip地址查询的全代 ...

  6. 某代理网站免费IP地址抓取测试

    源代码在测试中... http://www.AAA.com/nn/|    122.6.107.107|    8888|    山东日照|    高匿|    HTTP|    |    |     ...

  7. 爬取西刺ip代理池

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

  8. 爬取西刺网的免费IP

    在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...

  9. 使用Selenium&PhantomJS的方式爬取代理

    前面已经爬取了代理,今天我们使用Selenium&PhantomJS的方式爬取快代理 :快代理 - 高速http代理ip每天更新. 首先分析一下快代理,如下 使用谷歌浏览器,检查,发现每个代理 ...

随机推荐

  1. 学号 20175329 《Java程序设计》第10周学习总结

    20175329 <Java程序设计>第十周学习总结 教材学习内容总结 线程与进程 进程时程序的一次动态执行过程.线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程. J ...

  2. LeetCode 134. 加油站(Gas Station)

    题目描述 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其 ...

  3. CoordinatorLayout使用全解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012124438/article/details/56701641 CoordinatorLayo ...

  4. 域名到IP 报错socket.gaierror: [Errno 8] nodename nor servname provided, or not known

    Python中如何通过域名,查看对应的IP? 请看如下代码: import socket hostname="www.baidu.com" ip = socket.gethostb ...

  5. invalid new-expression of abstract class type 'CurveFittingEdge'

    目录 一 报错原因 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 报错原因 今天遇到了一个之前从未遇到的报错: error: invalid new-expression of abstr ...

  6. 自定义可拖动的Toast

    package com.loaderman.toastdemo; import android.content.Context; import android.graphics.PixelFormat ...

  7. ASP.NET Core开发者指南(转发)

    ASP.NET Core开发者指南 2019年ASP.NET Core开发者指南: 你可以在下面找到一张图,该图展示了你可以选取的路径及你想学习的库,从而成为一名 ASP.NET Core 开发者.& ...

  8. 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境

    使用这个jar包来跨服务器上传 搞两个tomcat.一个springmvc一个fileupload 选中tomcat server点击左边的加号 需要改端口和JMX pport这个端口 部署文件上传的 ...

  9. 点击其他区域关闭dialog

    1.在打开dialog处阻止冒泡,在body click事件中关闭dialog2.不阻止冒泡,在body click事件中判断target是否为diallog或其子节点 在Safari浏览器中,在默认 ...

  10. POJ 1182-食物链 [并查集] 《挑战程序设计竞赛》2.4

    Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...