如何爬取可用的IP代理
上一篇说到对付反爬虫有一个很关键的方法就是使用IP代理,那么我们应该如何获取这些可用的IP代理呢?这里分享一下自己这两天的一些爬取IP代理的心得体会。
1 步骤
1.找到几个提供免费IP代理的网站,获取IP数据源
2.验证对应的IP代理访问出口IP是否跟本机的出口IP一致,得到不一致的IP代理列表
3.根据自身的实验目的验证IP代理的响应速度,进行排序,择优选用
2 具体做法
1.可以上网搜索,有很多,例如西刺、快代理等等
2.可以在这里进行验证
3.这个就根据自身爬虫的需要,看是下载东西还是其他的,再进一步测试速度
3 代码
# *-* coding: utf-8 *-*
import BeautifulSoup
import requests
import time # to check if the ip proxy can work
URL_CHECK = 'http://1212.ip138.com/ic.asp'
RESPONSE_TIME = 2
IP_LOCAL = '120.236.174.144' # this is the pages of the website "http://www.ip181.com/daili/1.html"
# you can check out in the browser.
# the program will crawl the ip proxy from pages [start_page, end_page]
# as: [1,2], it will crawl the page 1 and page 2.
start_page = input('Please input your start page to crawl: ')
end_page = input('Please input your end page to crawl: ') s = requests.Session() # check if the exit IP is changed
def check_a_ip(ip):
start = time.time()
try:
connection = s.get(URL_CHECK, headers={
'Host': '1212.ip138.com',
'Referer': 'http://www.ip138.com/',
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
}, proxies={'http': 'http://' + ip}, timeout=RESPONSE_TIME)
res = connection.content
# print res soup = BeautifulSoup.BeautifulSoup(res)
ip_return = soup.findAll('center')[0].text.split('[')[1].split(']')[0]
return ip_return != IP_LOCAL, '%.6f' % (time.time() - start)
except Exception, e:
# print '<ERROR>'
# print e
return False, '-1' url = 'http://www.ip181.com/daili/%s.html'
ip_proxy_file = open('proxy.txt', 'w')
ip_proxy_file.write('ip_port,response_time\n')
ip_proxy_file.close() for i in range(int(start_page), int(end_page) + 1):
ip_proxy_file = open('proxy.txt', 'a') connection_crawl = s.get(url % str(i),headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
})
soup_crawl = BeautifulSoup.BeautifulSoup(connection_crawl.content) # parse each page,find the good ip proxy
trs = soup_crawl.findAll('tr')
for tr in trs[1:len(trs)]:
tds = tr.findAll('td')
ip = tds[0].contents[0] + ':' + tds[1].contents[0]
is_good, res_time = check_a_ip(ip)
if is_good:
ip_proxy_file.write(ip + ',' + res_time + '\n') print '%s : Finish to crawl the page %d. %s' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), i, url % str(i))
ip_proxy_file.close()
关于这份代码,有几个地方做一下说明:
· check_a_ip(ip):该函数为IP代理检查函数,返回两个值(一个为访问请求是否成功使用了代理,一个为检查的响应时间)
· start_page、end_page: 手动输入获取IP代理的网页页码,这个需要根据具体网站设定
· for i in range(int(start_page), int(end_page) + 1):主函数的循环,遍历设定范围的网页
· for tr in trs[1:len(trs)]:循环遍历并解析出一个网页中的所有IP代理,以及检验是否可用
· ip_proxy_file:文本写入,最终把结果都写入proxy.txt中
4 拓展
本实验可以采用多线程进行爬取或者检验,这样的爬取速率会快很多,大家有时间可以尝试一下
如何爬取可用的IP代理的更多相关文章
- 爬取西刺ip代理池
好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...
- 利用Python爬取可用的代理IP
前言 就以最近发现的一个免费代理IP网站为例:http://www.xicidaili.com/nn/.在使用的时候发现很多IP都用不了. 所以用Python写了个脚本,该脚本可以把能用的代理IP检测 ...
- 使用TaskManager爬取2万条代理IP实现自动投票功能
话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票.可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题. ...
- 爬取西刺网代理ip,并把其存放mysql数据库
需求: 获取西刺网代理ip信息,包括ip地址.端口号.ip类型 西刺网:http://www.xicidaili.com/nn/ 那,如何解决这个问题? 分析页面结构和url设计得知: 数据都在本页面 ...
- python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用
站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...
- python 爬取可用
#coding:utf-8 from bs4 import BeautifulSoup import time import threading import random import telnet ...
- 如果对方网站反爬取,封IP了怎么办?
放慢抓取熟速度,减小对目标网站造成的压力,但是这样会减少单位时间内的数据抓取量 使用代理IP(免费的可能不稳定,收费的可能不划算)
- python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大
第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrapy框架 具体就自行百度了,主要内容不是在这. 第二步:创建scrapy(简单介绍) 1.Creating a p ...
随机推荐
- 从0开始的hbase
2016马上要结束了,回顾一下这一年对hbase的学习历程. 1,年初hbase的状态 使用场景:主要是用来存储业务线的mysql表,增量同步到hbase,然后每天晚上全量导入hdfs做离线计算. h ...
- 线程池机制使nginx性能提高9倍
原文标题:Thread Pools in NGINX Boost Performance 9x! 原文官方地址:https://www.nginx.com/blog/thread-pools-boos ...
- Oracle 表-初步涉水不深(第一天)
oracle 关系型数据库 注释:面对大型数据处理,市场占有率40%多(但是目前正往分布式转换) 故事:本来一台大型计算机才能处理的数据,美国科学家用100台家用电脑连接,成功处理了数据.. tabl ...
- 策略模式--Java篇
策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 下面将以商场打折为例子,说明策略模式.商场收银如何促销,用打折还是 ...
- Android开发中使用数据库时出现java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
最近在开发一个 App 的时候用到了数据库,可是在使用数据库的时候就出现了一些问题,在我查询表中的一些信息时出现了一下问题: Caused by: java.lang.IllegalStateExce ...
- vue2.0排序应该注意的问题
在computed里新声明了一个对象sortItems,如果不重新声明会污染原来的数据源,这是Vue不允许的,所以你要重新声明一个对象. 如果不重新声明报错: <!DOCTYPE html> ...
- bat获取注册表值
@echo off Setlocal enabledelayedexpansion for /f "skip=2 delims=: tokens=1,*" %%i in ('reg ...
- zabbix企业应用之windows系统安装omsa硬件监控
具体请参考 作者:dl528888http://dl528888.blog.51cto.com/2382721/1421335 大致 1.安装OMSA http://zh.community.de ...
- jQuery 小实例 关于按字母排序
jQuery的强大再次不再赘述 一般情况下操作表格式数据的一种最常见的任务就是排序,在一个大型的表格中,能够对要寻找的信息进行重新排列是非常重要的,一般情况用来完成排序的方式有两种 :一种是服务器端排 ...
- 今天被 <!doctype html> 搞了两个小时,两个页面同样的样式,chosen右边的小箭头,一个上下居中对齐 一个居顶对齐。最后找到问题所在doctype
今天被 <!doctype html> 搞了两个小时,两个页面同样的样式,chosen右边的小箭头,一个上下居中对齐 一个居顶对齐.最后找到问题所在doctype <-- 这个小箭头