如何爬取可用的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 ...
随机推荐
- AJPFX: Java基础多线程(一)
多线程是Java学习的非常重要的方面,是每个Java程序员必须掌握的基本技能.本文只是多线程细节.本质的总结,并无代码例子入门,不适合初学者理解.初学者学习多线程,建议一边看书.看博文,以便写代码尝试 ...
- php socket通信演示以及socket操作类
准备做Java的课程设计,一个通讯录.采用C/S架构.客户端用java FX和Java,服务器端用php,采用socket通信. 下面来讲一讲php的socket通信: 讲之前,得先讲一下TCP/IP ...
- Swift 中的基础语法(二)
1.Swift 中的函数 /// 函数的定义 /// /// - Parameters: /// - x: 形参 /// - y: 形参 /// - Returns: 返回值 func sum(x: ...
- Spring------IOC&DI
一.Spring? Spring兴起:2003年,由Rod Johnson创建.总的来说,Spring Framwork从它诞生至今都一直为人所称道,它的伟大之处自此可见一斑. 核心:IOC& ...
- 总结几点sql语句优化
一.表设计阶段: 1.主键的使用 a.业务日志表.安全审计表采用自增长: b.自定义编号用于业务流程类表,根据一定的编号规则: c.int型主键 用于基础数据表: 2.逻辑删除字段的 ...
- 简单探讨弹性布局flex
css 弹性布局: 盒子模型: box-sizing属性1.content-box 正常的普通的盒子模型用padding和border会使盒子变大:(向外扩张)2.border-box 盒子模型,pa ...
- C/S模型:TCP,UDP构建客户端和服务器端(BIO实现
Java中提供了socket编程来构建客户端和服务器端 TCP构建服务器端的步骤:(1)bind:绑定端口号(2)listen:监听客户端的连接请求(3)accept:返回和客户端连接的实例(4)re ...
- jQuery 首页搜索区域模块随页面滑动而变化
/*搜索区块的颜色变化*/ function search(){ var searchBox = document.querySelector('.m_head'); var bannerBox = ...
- Entity Framework 6.x介绍
一.简介 Entity Framework是一个ORM框架,可以在SQL Server,Oracle,DB2,MySQL等数据库上使用.其发展到现在已经到6.x版本了,同时该版本也是被官方所推荐使用. ...
- url编码函数encodeURI和encodeURIComponent
var url = "http://www.wrox.com/illegal value.html#start";encodeURIComponent(url) //" ...