年前在考虑搞个关键扩词工具,如果直接抓取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();
}
}
}
}
分享到:
相关推荐
一款很好用的代理IP抓取软件,可设定自动抓取代理IP的时间段,可设定开机启动,自动去重,自动存档,支持后台操作。
在使用爬虫爬取网络数据时,如果长时间对一个网站进行抓取时可能会遇到IP被封的情况,这种情况可以使用代理更换ip来突破服务器封IP的限制。 随手在百度上搜索免费代理IP,可以得到一系列的网站,这里我们通过对西刺...
一个文件抓取免费的代理IP,验证后并存入mysql数据库,另一个文件循环排除已失效的IP,可用来创建自己的代理IP池
代理IP自动抓取并检查 c# 源码及exe
通过Java网络爬虫爬取指定代理ip网上的ip,利用了jsoup、httpclient技术实现
抓取网页IP和端口并设置代理 可以抓取下面网页的IP和端口 http://www.cnproxy.com/proxy1.html 个人写着用的。
python抓取淘宝天猫网页商品详情Demo 1、包含源码Demo 2、容易上手 3、亲测有效,无坑
python抓取淘宝天猫网页商品详情Demo.zip
提供公开代理ip的抓取,以及代理的管理后台,以及代理的展示后台。 目前是使用scrapy来抓取 ,上的公开代理,使用flask来管理抓取到的代理,以及对其它爬虫提供代理服务,使用react + flux来管理代理的后台页面。 但...
抓取网页数据
免费抓取代理IP,自动搜索网络代理,抓取代理网站内容
抓取网络数据demo
学习使用webmagic 进行静态页面抓取,springboot + webmagic demo项目,进行学习使用 。java 使用webmagic爬取网页数据
php整个网页的全部图片抓取以及指定图片抓取;此demo还未实现指定容器的图片抓取,还望大神舍笔!!!
X-Forwarded-For 是一个 HTTP 扩展头部,用来表示HTTP请求端真实 IP,HTTP/1.1 协议并没有对它的定义,但现如今X-Forwarded-For已被各大 HTTP 代理、负载均衡等转发服务广泛使用。 X-Forwarded-For 请求头格式: X-...
# 此项目的目的是为了抓取测试各代理免费IP,并测试提供可使用的IP给其他爬虫使用 import requests import re import random import time import os from functools import reduce """ 1.随机报头 2.ip地址池 """ # ...
前言 之前看到某公司的官网的文章的浏览量刷新一次网页就会增加一次,给人的感觉不太好,一个...当然代理IP来源肯定是免费,所以嘛效率一般,从一些免费的代理ip的网页抓取的代理IP并不一定都是有用的,所以需要我们对
根据输入的ip段获取ip所属地址信息
可以抓取网路中的所有ip包!可以方便学习者更直观的查看各种基于ip的协议。