`
nkliuliu
  • 浏览: 210072 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

抓取并验证代理ip小demo

阅读更多

      年前在考虑搞个关键扩词工具,如果直接抓取google的相关搜索。用不了几次就别封ip了,设了抓取间隔时长也没用(也可能设的时候太短),没办法只能抓取代理ip了,便有了下面的小demo。可惜的是网络资源还是太少,不够抓的,真正能用的代理ip没几个。根本形不成可用的规模。代码如下给可能用到的人做个参考吧:

package com.emar.spider;

import java.util.HashMap;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.emar.core.httpClient.HttpclientUtil;
import com.emar.core.util.PropertiesUtil;

public class Proxy {
	private static final String url = "http://www.proxycn.com/html_proxy/30fastproxy-1.html";
	private static Map<String, String> ipMap = new HashMap<String, String>();
	private static final String filePath = "D:/sts/workspace-sts-2.5.1_t1/sf3a/src/main/resources/proxy.properties";

	public static Map<String, String> getProxyMap() {
		String html = "";
		boolean flag = true;
		while (flag) {
			try {
				html = HttpclientUtil.get(url, null, "GB2312");
				flag = false;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		Document doc = Jsoup.parse(html);
		Elements trs = doc.select("tr[onDblClick]");
		for (Element e : trs) {
			String ip = e.attr("onDblClick").replaceAll("clip", "")
					.replaceAll("已拷贝到剪贴板!", "").replaceAll("alert", "")
					.replaceAll("'", "").replaceAll(";", "")
					.replaceAll("\\(", "").replaceAll("\\)", "");
			String[] ipArray = ip.split(":");
			ipMap.put(ipArray[0], ipArray[1]);
		}
		return ipMap;
	}

	public static void writeValidProxy() {
		Map<String, String> ipMap = getProxyMap();
		System.out.println("本次共获取到的:" + ipMap.size() + "个代理");
		for (String ip : ipMap.keySet()) {
			String port = ipMap.get(ip);
			System.out.println("获取新的待检验的:" + ip + "=" + port);
			boolean flag = HttpclientUtil.checkProxy(ip, port);
			if (flag) {
				System.out.println("写入有效:" + ip + "=" + port);
				PropertiesUtil.writeProperties(filePath, ip, port);
			} else {
				System.out.println("移除失效:" + ip + "=" + port);
				PropertiesUtil.removeProperties(filePath, ip);
			}
		}
	}

	public static Map<String, String> getValidProxyMap() {
		return PropertiesUtil.readProperties(filePath);
	}

	public static void removeInvalidProxy() {
		Map<String, String> ipMap = getValidProxyMap();
		for (String ip : ipMap.keySet()) {
			String port = ipMap.get(ip);
			System.out.println("校验原有:" + ip + "=" + port);
			boolean flag = HttpclientUtil.checkProxy(ip, port);
			if (!flag) {
				System.out.println("移除失效:" + ip + "=" + port);
				PropertiesUtil.removeProperties(filePath, ip);
			}
		}
	}

	/**
	 * @param args
	 * @throws InterruptedException
	 */
	public static void main(String[] args) {
		while (true) {
			try {
				removeInvalidProxy();
				writeValidProxy();
				Thread.sleep(1000 * 60 * 30);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
 

 

 

1
5
分享到:
评论
2 楼 nkliuliu 2011-03-17  
恩,异曲同工吧。代码写的确实不简洁。
1 楼 li2005 2011-03-17  
楼主,我也玩过网页抓取代理IP,用正则表达式会很方便

相关推荐

    网页抓取DEMO-可以运行的一个java项目

    ### 网页抓取DEMO-可以运行的一个Java项目 #### 一、项目概述 本文档介绍了一个简单的网页抓取Java项目示例,适用于希望了解网页抓取基本原理及实现方式的学习者。通过本项目,你可以学习如何利用Java语言进行网络...

    网页数据比分抓取源码

    此外,随着网站动态加载和反爬虫技术的发展,抓取过程中可能需要处理JavaScript执行、登录验证、验证码识别等问题。 在实际应用中,数据抓取可以结合数据清洗、数据分析等环节,形成完整的数据处理流程,用于竞彩...

    海康威视摄像头对接demo

    "海康威视摄像头对接demo" 是一个专为开发者设计的示例项目,目的是帮助他们理解并实现与海康威视摄像头的集成和对接。这个demo适用于各种类型的摄像头,包括球机和枪机,这两大类摄像头各有特点,满足不同的应用...

    海康的web开发包,demo及说明,亲测可用

    5. 运行脚本或部署指南:帮助开发者设置环境并运行Demo。 总的来说,这个开发包为想要在Web端集成海康威视摄像头功能的开发者提供了一站式的解决方案。通过深入学习和实践,开发者不仅可以了解如何使用海康的SDK,...

    python 爬虫开发--批量爬取某站小视频demo源码.zip

    8. **可能的反爬策略**:为避免被目标网站封禁,可能需要实现一些反反爬策略,如设置IP代理池、随机User-Agent、限制请求频率等。 9. **代码结构**:良好的代码组织和模块化设计,可以使项目易于理解和维护。可以...

    C-DEMO.zip_DEMO_dahua_大华二次开发

    1. **设备连接与认证**:开发者需要了解如何通过网络连接到大华的设备,并进行身份验证。这通常涉及到TCP/IP协议、HTTP或HTTPS请求,以及大华SDK提供的认证机制。 2. **API调用**:大华提供的SDK包含了一系列API,...

    IEC61850 Demo程序 配置程序 抓包工具

    1. 故障诊断:当设备通信出现问题时,通过抓取并分析数据包,可以定位问题所在,如错误的数据格式、丢失的报文等。 2. 性能评估:分析通信速率、延迟和其他网络性能指标,以确保系统满足实时性的要求。 3. 安全审计...

    换吗首页商品采集demo.7z

    《换吗首页商品采集demo.7z》是一个包含Python脚本的压缩文件,主要用于演示如何从换吗APP抓取首页的商品列表数据。该文件的核心是`换吗首页商品采集demo.py`,它提供了自动化采集和解析商品信息的逻辑。下面我们将...

    大华视频监控WEB二次开发插件demo.zip

    该插件具有稳定性和可靠性,已经在实际项目中得到验证,可确保在不同环境下顺畅运行。 二、主要功能 1. 直播:通过调用插件接口,开发者可以实现实时视频流的播放,让终端用户在Web页面上观看监控画面,实时了解...

    python 爬虫开发-爬取北、上、广租房子的信息demo源码+注解清晰.zip

    此外,爬虫还需要考虑反爬策略,如设置合适的延时以避免被服务器封IP,使用代理IP池增加爬取的隐蔽性,以及处理验证码和登录验证等问题。在项目中,可能会看到如何使用`time.sleep()`控制爬取速度,以及如何集成代理...

    Scrapy-demo:这是一个 Scrapy 演示

    Scrapy 是一个强大的 Python 爬虫框架,用于高效地抓取网页数据并处理它们。在"Scrapy-demo"这个项目中,我们将深入探讨 Scrapy 的核心组件和工作原理,以及如何利用它来构建自己的爬虫。 首先,让我们了解 Scrapy ...

    猎聘采集scrapy源码

    3. **反反爬策略**:为了防止被网站封禁,源码可能包含了一些反反爬策略,比如设置User-Agent、随机延时、使用代理IP等。 4. **数据解析**:使用XPath或CSS选择器解析猎聘网页的HTML,提取出职位的标题、公司名、...

    HCNetSDK_海康_Go_go调用海康sdk_go_

    接下来,我们需要下载并安装海康威视的SDK。这个过程通常包括获取SDK的安装包,解压后得到头文件(.h)和动态链接库(.dll或.lib)。在Windows上,动态链接库通常为.dll文件,而在Linux或macOS上可能是.so或.dylib...

    基于Socket的多线程C#爬虫程序

    3. `Crawler_demo.zip`:可能包含了一个演示或测试用例,帮助用户快速理解和验证爬虫的功能。 4. `Crawler.aspx_files`:这部分可能是一些配套的静态资源文件,如CSS样式表、JavaScript脚本等,用于支持`Crawler....

    php spider

    PHP Spider是一种基于PHP语言的网络爬虫框架,用于自动化地抓取互联网上的数据。...对于网络爬虫来说,还应关注反爬机制、IP代理池、数据解析规则等方面的知识,以应对复杂的网络环境和数据处理需求。

    基于国家企业信用信息公示系统的反爬虫验证码类型.zip

    ,从数据采集、人工标注、模型构建、训练和验证的过程,最终构建形成demo演示 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常...

    JAVA批量下载图片

    在IT行业中,Java是一种广泛应用的编程语言,尤其在企业级应用和服务器端...通过这个小DEMO,开发者可以学习到如何利用Java实现一个实用的网络爬虫工具,不仅可以应用于CSDN论坛,也可以扩展到其他有类似需求的场景。

    基于C#实现网页爬虫

    至于反爬机制,可能需要设置合理的延时、更换UserAgent、使用代理IP等策略。 此外,解析HTML内容通常会用到如HtmlAgilityPack或AngleSharp这样的库,它们可以帮助我们方便地解析和操作HTML文档,提取所需的数据。...

    海康网络SDK-Android

    5. 图片获取:SDK提供了抓取和下载设备拍摄图片的功能。开发者可以请求实时预览图或者历史录像帧,这对于分析和记录关键事件尤其有用。图片数据可以保存到本地存储,便于后续查看或分析。 6. 项目架构:项目架构...

Global site tag (gtag.js) - Google Analytics