如何爬取可用的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 ...
随机推荐
- rsync常见错误
rsync使用时的常见问题: 错误1: rsync: read error: Connection reset by peer (104) rsync error: error in rsync pr ...
- MySQL-时间(time、date、datetime、timestamp和year)
情景进入 情境进入: 今天调试某查询页面,偶尔发现一个问题,刚刚插入的数据,没有正常排序显示,经过后台调试sql,发现一个问题??? 经过上面红色对比,不知道你发现问题没,Order by 只是多一个 ...
- java课程设计全程实录——第3天
参考资料: 课设主要指导: http://www.cnblogs.com/zhrb/p/6872265.html 2019年5月10日 https://blog.csdn.net/weixin_421 ...
- Python __str__(self)和__unicode__(self)
object.__str__(self) Called by the str() built-in function and by the print statement to compute the ...
- [翻译] API测试最佳实践 - 身份验证(Authentication)
API测试最佳实践 - 身份验证 适用等级:高级 1. 概况 身份验证通常被定义为是对某个资源的身份的确认的活动,这里面资源的身份指代的是API的消费者(或者说是调用者).一旦一个用户的身份验证通过了 ...
- [eclipse]的快捷键的设置
今天新解压了一个eclipse,发现alt+/提示的快捷键不好用了,开始比较犯懒,但是发现开发效率低下,总结几个eclipse下快捷方式的解决办法. 第一个解决没有一点提示的情况. 1.首先通过菜单打 ...
- Android(java)学习笔记198:ContentProvider使用之内容观察者(观察发出去的短信)
1.新建一个案例如下: 2. 不需要添加权限,同时这里布局文件不做修改,来到MainActivity,如下: package com.itheima.sendsmslistener; import a ...
- loadrunner 响应时间和TPS
例子:一个高速路有10个入口,每个入口每秒钟只能进1辆车 1.请问1秒钟最多能进几辆车? TPS=10 2.每辆车需要多长时间进行响应? reponse time = 1 3.改成20辆车 ...
- vue动态加载组件
vue动态加载组件,可以使用以下方式 <component :is="propertyname" v-for="tab in tabs"></ ...
- 并发2-Synchronized
一.Synchronized的概念 是利用锁的机制来实现同步的. 锁机制有如下两种特性: 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个 ...