任务分析

我们爬的免费代理来自于https://www.kuaidaili.com这个网站。用`requests`将ip地址与端口采集过来,将`IP`与`PORT`组合成`requests`需要的代理格式,用`requests`访问`[http://ipcheck.chinahosting.tk/][1]`,并判断返回的字符串是否是代理IP,若是,则代理IP有效,若不是,则代理IP无效。

数据采集现在已经成为了基本操作了,所以大家直接看代码就可以了,注释应该写的很清楚了。如果是个新手,那么可以看这篇文章:采集wordpress并自动发布文章,这篇文章看懂了,基本上全世界大部分的网站你就都能爬了。

这个站点http://ipcheck.chinahosting.tk/是我个人搭建的用来验证IP的,详情见文章:利用虚拟主机搭建一个验证爬虫代理IP是否有效的服务,大家如果自己用的话最好搭建一个,基本上10多分钟就能搭建完,并且只要点点鼠标。

代码实现

#首先,导入必要的包
import gevent.monkey
gevent.monkey.patch_socket()
import gevent
import requests
import time
from fake_useragent import UserAgent
from lxml import etree
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf8') #定义GetProxy类
class GetProxy():
#初始化一些参数
def __init__(self):
self.ua = UserAgent()
self.check_url = 'http://ipcheck.chinahosting.tk/'
self.threads = []
self.count = 0 #定义download_page函数,用来请求一个url并且返回返回值
def download_page(self, url):
headers = {"User-Agent":self.ua.random}
response = requests.get(url)
print response.status_code
return response.content #对页面进行数据清理
def crawl_kuaidaili(self):
for page in xrange(1,50):
url = 'https://www.kuaidaili.com/free/inha/' + str(page)
response = self.download_page(url)
soup = BeautifulSoup(response, "html.parser")
all_tr = soup.find_all('tr')
for tr in all_tr:
ip = tr.find('td',attrs={"data-title":"IP"})
port = tr.find('td',attrs={"data-title":"PORT"})
if ip==None or port==None:
pass
else:
#print "http://"+ip.get_text()+":"+port.get_text()
self.threads.append(gevent.spawn(self.valid_check, [ip.get_text(), port.get_text()]))
#print "add a task"
time.sleep(1) #验证爬虫的有效性
def valid_check(self, *arg):
ip = arg[0][0]
port = arg[0][5]
proxyip = "http://"+ip+":"+port
proxy={"http":proxyip}
try:
response = requests.get(self.check_url, proxies=proxy, timeout=5)
#print response.content
if str(response.content) == ip:
print ip
self.count = self.count + 1
else:
pass
except:
pass #启动爬虫
def start(self):
self.crawl_kuaidaili()
gevent.joinall(self.threads)

维护爬虫代理IP池--采集并验证的更多相关文章

  1. 【python3】如何建立爬虫代理ip池

    一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可 ...

  2. 建立爬虫代理IP池

    单线程构建爬虫代理IP池 #!/usr/bin/python3.5 # -*- coding:utf-8 -*- import time import tempfile from lxml impor ...

  3. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  4. 可能是一份没什么用的爬虫代理IP指南

    写在前面 做爬虫的小伙伴一般都绕不过代理IP这个问题. PS:如果还没遇到被封IP的场景,要不就是你量太小人家懒得理你,要不就是人家压根不在乎... 爬虫用户自己是没有能力维护一系列的代理服务器和代理 ...

  5. 利用代理IP池(proxy pool)搭建免费ip代理和api

    先看这里!!!---->转载:Python爬虫代理IP池(proxy pool) WIIN10安装中遇到的问题: 一.先安装Microsoft Visual C++ Compiler for P ...

  6. 构建一个给爬虫使用的代理IP池

    做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径 ...

  7. 爬虫入门到放弃系列05:从程序模块设计到代理IP池

    前言 上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的.本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结. 在我漫(liang)长(nian)的爬虫开发生涯中,我通常将 ...

  8. 基于后端和爬虫创建的代理ip池

    搭建免费的代理ip池 需要解决的问题: 使用什么方式存储ip 文件存储 缺点: 打开文件修改文件操作较麻烦 mysql 缺点: 查询速度较慢 mongodb 缺点: 查询速度较慢. 没有查重功能 re ...

  9. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

随机推荐

  1. linux批量压缩当前目录中文件后,删除原文件

    linux批量压缩当前目录中文件后,删除原文件 for i in `ls|awk -F " " '{print $NF}'`; do tar -zcvf $i.tar.gz $i ...

  2. 移动开发day2_css预处理器_flex布局

    css预处理器 一种技术,可以提高编写css代码的技术而已. 有3种预处理器常见 less sass stylues less使用流程 编写符合less语法的less文件 使用工具 将less编译成 ...

  3. MYCP作业

    本次作业主要复习了输入流输出流的内容 作业要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt ...

  4. C# bool.tryparse

    才工作时候是做C++的,受这个影响一直以为C# 转换 “0” 和 "false"会转换为 false,“1”和"true"转换为true,原来只有“true”才 ...

  5. 模拟stringBeanFactory解析xml

    思路:根据源码分析,将配置Bean类信息存放到xml文件中,通过解析xml, 然后反射拿到对象 存放到集合中 这里选择hashmap(键放置类名,值放置对象)存放,使用时使用get方法通过键(类名)拿 ...

  6. java aes CBC的填充方式发现

    如下的java代码,手动对block进行填充后,使其为16的整数倍后,加密的时候竟然强行再填充了16位,我在尝试用golang实现这段加密时,反复修改了很久,发现golang版的总是比java加密出来 ...

  7. IDEA+MySQL实现登录注册的注册验证时出现 Cannot resolve query parameter '2'

    问题描述: 在IDEA+MySQL+Tomcat 实现登录注册JSP的注册信息INSERT验证时出现 Cannot resolve query parameter '2' 贴上创建链接的代码: if( ...

  8. mysql命令行的导入导出sql,txt,excel(都在linux或windows命令行操作)(转自筑梦悠然)

    原文链接https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/73805962 Mysql导入导出sql,txt,excel 首先我们通过命令行 ...

  9. 我的react+material-ui之路

    在学习react和material-ui时我遇到的问题和解决方法 react要安装得在当前文件夹下面安装, npm命令在当前文件夹执行 npm install -g全局安装, 不会安装在当前包下 np ...

  10. vue 前端框架 (二) 表格增加搜索

    本章知识点 归纳: 1.定义全局过滤器 以及 私有过滤器 2.定义全局指令 以及 定义私有指令 3.定义键盘修饰符 4.v-for 的函数引入 5.字符串的incluede 方法,.toString( ...