上一篇说到对付反爬虫有一个很关键的方法就是使用IP代理,那么我们应该如何获取这些可用的IP代理呢?这里分享一下自己这两天的一些爬取IP代理的心得体会。

步骤

  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代理的更多相关文章

  1. 爬取西刺ip代理池

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

  2. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

  3. 利用Python爬取可用的代理IP

    前言 就以最近发现的一个免费代理IP网站为例:http://www.xicidaili.com/nn/.在使用的时候发现很多IP都用不了. 所以用Python写了个脚本,该脚本可以把能用的代理IP检测 ...

  4. 使用TaskManager爬取2万条代理IP实现自动投票功能

    话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票.可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题. ...

  5. 爬取西刺网代理ip,并把其存放mysql数据库

    需求: 获取西刺网代理ip信息,包括ip地址.端口号.ip类型 西刺网:http://www.xicidaili.com/nn/ 那,如何解决这个问题? 分析页面结构和url设计得知: 数据都在本页面 ...

  6. python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用

    站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...

  7. python 爬取可用

    #coding:utf-8 from bs4 import BeautifulSoup import time import threading import random import telnet ...

  8. 如果对方网站反爬取,封IP了怎么办?

    放慢抓取熟速度,减小对目标网站造成的压力,但是这样会减少单位时间内的数据抓取量 使用代理IP(免费的可能不稳定,收费的可能不划算)

  9. python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大

    第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrapy框架 具体就自行百度了,主要内容不是在这. 第二步:创建scrapy(简单介绍) 1.Creating a p ...

随机推荐

  1. ES6学习笔记(2)----变量的解构和赋值

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 变量的解构和赋值 本质上:只要模式匹配,左边的变量就能被赋予右边对应的值 原则: 解构赋值的规则 ...

  2. yii在Windows下安装(通过composer方式)

    Composer 安装: (Composer 不是一个包管理器,它仅仅是一个依赖管理工具.它涉及 "packages" 和 "libraries",但它在每个项 ...

  3. H.264学习笔记2——帧内预测

    帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值. ...

  4. 临时笔记 Protection

    如果操作系统不使用处理器的多任务机制,它仍然需要为栈创建至少一个TSS 当程序通过调用门改变特权级的时候,处理器执行下面的步骤切换栈,并且执行被调用的程序在新的特权级 1. 使用目标代码段的DPL从T ...

  5. MyHome3D在线装修设计软件测评

    人人都是设计师 ——MyHome3D在线装修设计软件 关键词:云技术,3D呈现效果,自主设计,简单易用,家具装修设计 上海爱福窝云技术有限公司借助于前沿的3D渲染技术,降低了装修设计的门槛,真正实现了 ...

  6. clusterdb - 对一个PostgreSQL数据库进行建簇

    SYNOPSIS clusterdb [ connection-option...] [ --table | -t table] [ dbname] clusterdb [ connection-op ...

  7. autofs - automounter maps的格式

    描述(DESCRIPTION) automounter maps 是一系列非主映射文件或者是NIS映射(NIS maps),它们被 automounter 的主映射文件(master map)具体调用 ...

  8. Flutter走过的坑(持续更新)

    1 Target of URI doesn't exist 'package:flutter/material.dart' 官方下载的flutter中有一个example文件夹,里面有很多flutte ...

  9. [转]解决右键用notepad++打开提示【ShellExecute failed (2): Is this command Correct? (Fix) 】

    最近发现右键使用notepad++打开文件时提示如下错误: ShellExecute failed (2): Is this command Correct? ... 经用搜索引擎搜索得知,应该是开启 ...

  10. 卸载钩子 UnhookWindowsHookEx

    The UnhookWindowsHookEx function removes a hook procedure installed in a hook chain by the SetWindow ...