前言

仅仅伪装网页agent是不够的,你还需要一点新东西

今天主要讲解两个比较知名的国内免费IP代理网站:西刺代理&快代理,我们主要的目标是爬取其免费的高匿代理,这些IP有两大特点:免费,不稳定(至于为什么要爬不稳定的免费的代理,你心里难道没点B+树么,高富帅谁** 过来学爬虫,还爬代理,人家直接买好么~)

目标

给出目标网站,盘它

  • 快代理高匿代理 IP(https://www.kuaidaili.com/free/inha/)
  • 西刺高匿代理 IP(http://www.xicidaili.com/nn/)

快代理

  • 代码详情
import ChangIp.GetAgent
import org.jsoup.Jsoup
import org.jsoup.nodes.Documentimport scala.collection.mutable.ArrayBuffer
import scala.util.{Failure, Random, Success, Try}
import scala.collection.JavaConverters._/*** @Author ******** @Create 2019-01-23 11:59* @Descripation:***/
object IP_CollectTest {//抓取快代理前10页的ipdef requestGetUrl(times:Int=20)(url:String,tag:String,arr_all:ArrayBuffer[String]): Unit ={//设置随机间隔时间var delay:Long=500delay = (1000+(new Random).nextInt(4000)).toLong//开始抓取//GetAgent.get_agent()方法--见上一篇,很简单,自己加一下就行Try(Jsoup.connect(url+tag).userAgent(GetAgent.get_agent()).get())match {case Failure(e) =>{if(times!=0){println(e.getMessage)//抓取失败重试Thread.sleep(delay)requestGetUrl(times-1)(url,tag,arr_all)}else throw e}case Success(doc) =>// 解析网页传入参数,doc和保存数据的数组val count = parseDoc(doc,arr_all)if (count==0){//抓取失败重试Thread.sleep(delay)if(times>=0){requestGetUrl(times-1)(url,tag,arr_all)}else {println(tag+"scrape data failed...,Please comfirm this word again")}}}}//网页解析def parseDoc(doc:Document,arr_all:ArrayBuffer[String]): Int ={// 用count判断是否有返回数据var count = 0val links = doc.select("tr")for(link<-links.asScala){// 爬取IPval ip = link.select("td").select("[data-title=IP]").text()// 爬取portval port = link.select("td").select("[data-title=PORT]").text()// 拼成字符串并保存if(!ip.isEmpty && !port.isEmpty){val res = ip+":"+portprintln(res)arr_all.append(res)// 有返回数据则count+1count+=1}}count}def use : ArrayBuffer[String] ={// 用一个array数组保存结果val arr_all = ArrayBuffer[String]()//遍历前10页for(i<-Range(1,11)){val url = "https://www.kuaidaili.com/free/inha/"// 传入三个参数(地址,页数,数组)requestGetUrl()(url,i.toString,arr_all)}//返回保存爬取数据的数组arr_all}def main(args: Array[String]): Unit = {use}
}

  • 结果展示


西刺代理

这里我们只放一下网页解析的代码,其他的跟上面一样

  • 代码详情
bject XiCi_IPCollect {def main(args: Array[String]): Unit = {// 爬取的网址val url = "https://www.xicidaili.com/nn/1"// 加上TryCatch框架Try(Jsoup.connect(url).get())match {case Failure(e) =>// 打印异常信息println(e.getMessage)case Success(doc:Document) =>// 解析正常则返回Document,然后提取Document内所需信息val links = doc.select("table#ip_list").select("tr")for(link<-links.asScala){val txt = link.text()val ip = txt.split(" ")(0)val port = txt.split(" ")(1)if(ip.contains(".")){println(ip+":"+port)}}}}
}

  • 结果展示


代理验证

因为这些免费IP不稳定的原因,其实这些IP里有很大一部分是不能用的,所以需要我们来提取能用的IP,以节省后续爬虫的时间

验证IP是否可用其实非常简单,就是在header里加入要查询的IP,然后访问一下网站,如果成功,那么代表IP可用

def is_pass(arr_all:ArrayBuffer[String]): ArrayBuffer[String]  = {//arr_all 数组里保存这上面我们爬取的代理IPval arr_pass = ArrayBuffer[String]()for (i <- arr_all) {try{//proxy(ip,port)这个函数添加ip进headerval response = Jsoup.connect("http://www.baidu.com").proxy(i.split(":").head.trim,i.split(":").last.trim.toInt).userAgent(agent).execute()//网站返回码不是200就可以,这方面有兴趣可以自己google一下if(response.statusCode()!=200){println("Bad proxy: "+i)}else {arr_pass.append(i)println("Success  proxy: "+i)}}catch{case e => println(e)}}arr_pass}

或者不用简单直接一点

 //验证ip是否可用def is_pass(arr_all:ArrayBuffer[String]): ArrayBuffer[String]  ={val arr_pass = ArrayBuffer[String]()for(i<-arr_all){Try(Jsoup.connect(URL_pas).proxy(i.split(":").head.trim,i.split(":").last.trim.toInt).userAgent(agent).get())match {case Failure(e)=>println(e)//如果没有异常,直接添加case Success(doc:Document)=>//          println(i)arr_pass.append(i)}}arr_pass}

结尾唠叨两句

如果你对我的文章感兴趣,欢迎你点开我下一篇文章,后面我将手把手带你一起完成一个个小case,对了如果你也有好的想法,欢迎沟通交流
今天主要是分享了一下IP代理获取的小方法,有兴趣的同学还可以自己添加定时的功能,每天更新IP。

转载于:https://www.cnblogs.com/wxplmm/p/10319515.html

代理IP爬取和验证(快代理西刺代理)相关推荐

  1. 快代理IP爬取 并建立可用IP池

    下面展示一些 内联代码片. #快代理IP爬取 并建立可用IP池 import requests import time from lxml import etree from fake_userage ...

  2. 爬虫篇——代理IP爬取备用及存储

    爬虫篇--代理IP爬取备用及存储 代码 代码 本文通过抓取免费的高匿IP代理,将其写入列表并保存为json格式文件,且将代码进行了封装,方便以后抓取数据时动态的更新handle的IP地址,从一方面避免 ...

  3. 爬虫之使用代理ip爬取

    爬虫之代理ip的应用 ​ 在爬虫的过程中,我们经常会遇见很多网站采取了防爬虫技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力. ​ 如果一直用同一个代理ip爬取这个网 ...

  4. 数据抓取 -- 使用代理IP爬取数据:(2):使用timeout 时要注意,防止数据加载不完整 ,导致爬取丢失(举例)

    问题: 在使用代理IP爬取数据的时候,经常会出现爬取的网址信息不完整的现象.其中有个原因就是timeout设置问题. 代码如下: import requests from bs4 import Bea ...

  5. python爬虫代理的使用_从零开始写Python爬虫 --- 2.4 爬虫实践:代理的爬取和验证...

    爬网站的时候,由于各种原因,ip被锁了,这个时候我们就需要通过代理来突破封锁.网上有很多代理网站,付费和免费的都有,这次我们就来写一个scrapy爬虫,爬一些免费的代理下来用. 目标分析: 本次爬取了 ...

  6. 高可用免费代理ip爬取实战

    我们在使用爬虫的时候,会对代理ip有一定程度的需求.今天爬取的这个免费代理网站不是大家已经爬烂的西刺和66等代理网站,是我无意间发现的~ 这个网站还是有一点意思的. 注意到没有,这里的ip地址被换成了 ...

  7. 第2.1章 scrapy之国内高匿代理IP爬取

    这个网站较为简单,故作为爬虫的第一个示例 代码如下: # -*- coding: utf-8 -*- ''' Created on 2017年6月12日 从国内高匿代理IP网站中获取动态ip信息 @s ...

  8. 利用代理IP爬取京东网站手机数据

    1.代理简介 在爬虫过程中如果经常用自己的IP进行爬虫会出现IP被封的可能,这就要用到代理技术,通过爬取代理网站的IP地址,每次爬取页面就随机选择一个IP地址进行爬取,这样就会降低IP被封的可能性. ...

  9. java使用代理ip爬取网站内容

    在一些有反爬虫技术的网站中,检测到同一ip在短时间内多次访问的时候,可能就会禁掉这个ip. 上有政策,下有对策,为了应对这种情况,可以使用多个代理ip去爬取这个网站. java使用代理ip有两种方法: ...

最新文章

  1. SAP RETAIL WR60 商品补货参数概述
  2. XO Wave-数字音频编纂软件
  3. 蒸汽机器人布里茨天赋_LoL蒸汽机器人符文天赋_S10机器人辅助出装
  4. Java在游戏服务器开发中的应用
  5. Android心得8--Internet
  6. C++中的内联函数和C中的宏定义的区别
  7. html高级编辑工具,高级编辑工具
  8. 拓客系统专用服务器,北京拓客系统
  9. 简单打印-双排标签102*30模板设计
  10. 奥斯汀页眉怎么设置_wps怎么只删除本页的页眉_Word页眉的设置和删除,这些问题你有遇到过吗?...
  11. 7.TCP的十一种状态集
  12. c语言编写万年历课程设计,用C语言编写万年历 C课程设计.pdf
  13. 视频教程-跟宁哥学Go语言视频课程(10):反射-Go语言
  14. 惠普暗影精灵ubuntu双系统安装(通用方法)
  15. dnf最新地图编号2020_dnf2020搬砖地图排行榜 dnf2020最佳搬砖地图
  16. flink DataStream returns 设置返回类型
  17. 火了几年的大前端,现在怎么样了?
  18. 阅读nutch.Analysis.jj
  19. 推荐算法的准确度评价指标:
  20. 「码个蛋」邀约投稿,收获个人成长

热门文章

  1. android开发经典难题,今年安卓开发中碰到的几个稀奇古怪的问题
  2. 机器人课程类为何会纸媒末路呢
  3. 小说网站和小说app用户体验
  4. 在OneDrive使用goodsync或软链接进行文件备份的优缺点
  5. 徐志摩题要求:•使用外部引入CSS样式的方式为网页设置样式 •标题使用<h3>标签,其他文本均放在段落标签<p>中 •使用标签选择器设置标题h3的字体颜色为#ddf111 •使用ID选择器设置p段
  6. Linux环境下(CentOS操作系统)如何修改MySQL数据库及Redis的密码?
  7. Excel制作下拉列表
  8. R语言bug biomaRt filter_没有适用于c(‘tbl_SQLiteConnection‘, ‘tbl_dbi‘, ‘tbl_sql‘, ‘tbl_lazy‘, ‘tbl‘)目标对象的方法
  9. 天玑720支持鸿蒙系统吗,天玑720和麒麟820哪个好_天玑720和麒麟820对比评测
  10. Linux samba服务配置