`

挖金子---小爬虫

阅读更多
马萨玛索(http://www.masamaso.com/index.shtml)每天10点都会推出一折商品5件,就是秒购。男装质量还不错,所以就经常去抢,感觉手动太慢了,就写了一个小爬虫程序,让自己去爬,如果是金子页面(免费商品)就会自动打开,我就可以抢到了。和大家分享一下。这个应该不算广告吧,之所以给链接和网站名是想着便于各位感兴趣看官测试,如果管理员觉得不妥,请通知哈,我再修改,不要直接封我哈,谢了。

思路:
1. 把所有想要的商品的链接读到程序中。
2. 分别打开每一个链接读取源代码
3. 验证是否是金子商品(源代码中含有free_msg字符串)
4. 如果是金子就把该链接用IE打开

源代码:
读链接文件:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Administrator
 *
 */
public class FileReader {
	private String fileName;
	
	public FileReader() {
	}
	
	public FileReader(String fileName) {
		this.fileName = fileName;
	}
	
	/**
	 * 读取链接,返回一个List
	 * @return
	 */
	public List<String> getLines() {
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new InputStreamReader(new FileInputStream(this.fileName)));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		List<String> lines = new LinkedList<String>();
		String line = null;
		try {
			while ( (line = reader.readLine()) != null) {
			    lines.add(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return lines;
	}
}


URL类:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
 * @author Administrator
 *
 */
public class Url {
	private String url;
	
	public Url() {
	}
	
	public Url(String url) {
		this.url = url;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
	
	/**
	 * 获得链接
	 * @return
	 */
	public URLConnection getConnection() {
		URL httpUrl = null;
		try {
			httpUrl = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		
		URLConnection conn = null;
		
		if(httpUrl != null) {
			try {
				conn = httpUrl.openConnection();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return conn;
	}
	
	/**
	 * 获得链接上的输出流
	 * @return
	 */
	public BufferedReader getReader() {
		URLConnection conn = getConnection();
		BufferedReader br = null;
		if(conn == null) {
			return null;
		}
		conn.setConnectTimeout(9000);
		try {
			conn.connect();
			br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		
		return br;
	}
	
	/**
	 * 从输出流中一行一行读取文件,查看是否含有str字符串,有就返回真
	 * @param str
	 * @return
	 */
	public boolean isExist(String str) {
		BufferedReader bis = getReader();
		boolean exist = false;
		
		String line = null;
		try {
			while ( (line = bis.readLine()) != null) {
			    exist = line.contains(str);
			    if(exist) {
			    	break;
			    }
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				bis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return exist;
	}
}

Digger类:
import java.io.IOException;
import java.util.List;

/**
 * @author Administrator
 *
 */
public class Digger extends Thread{
	private Url url;
	
	public Digger() {
		super();
	}
	
	public Digger(Url url) {
		this.url = url;
	}
	
	/**
	 * main方法,把配置信息(链接)读入程序,并为每一个链接开启一个线程
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		FileReader reader = new FileReader("F:/myworkspace/workspace/diggold/src/url.txt");
		List<String> urls = reader.getLines();
		
		for (String string : urls) {
			Url url = new Url(string);
			Digger digger = new Digger(url);
			digger.start();
		}
//		Runtime.getRuntime().exec("C:/Program   Files/Internet   Explorer/iexplore.exe   http://www.masamaso.com/index.shtml");
	}

	/**
	 * 查看该链接是否存在free_msg字段,存在即为金子 用IE打开该链接
	 */
	@Override
	public void run() {
		if(url.isExist("free_msg")) {
			try {
				Runtime.getRuntime().exec("C:/Program   Files/Internet   Explorer/iexplore.exe   " + url.getUrl());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println(url.getUrl() + "END!");
	}
}


url.txt配置文件
http://www.masamaso.com/goods.php?id=3128
http://www.masamaso.com/goods.php?id=3132
http://www.masamaso.com/goods.php?id=3120


写的比较简单,但是挺实用,各位看官莫笑话哈。
分享到:
评论
13 楼 james112496 2010-01-19  
我运行了一下IE也没打开?
12 楼 gelnyang 2010-01-19  
我之前也写了一个类似的,一直想找时间优化一下,没来得时间弄。楼主可以参考一下,欢迎提出意见:http://code.google.com/p/seawind
11 楼 ajonjun 2010-01-19  
好东西,拿来研究哈,谢。
10 楼 sunhj000java 2010-01-19  
CZy5168 写道
我运行了你的代码,虽然把商品的链接读到程序中,但是为什么IE没有打开链接地址呢。。。
而且链接加多了一条件:
http://www.masamaso.com/goods.php?id=3128&free_msg=1  
http://www.masamaso.com/goods.php?id=3132  
http://www.masamaso.com/goods.php?id=3120 
菜鸟肯请赐教!!!

有可能就是没有哦,你可以把链接打开看看。10点以后在运行,10点钱肯定没有的
9 楼 CZy5168 2010-01-18  
我运行了你的代码,虽然把商品的链接读到程序中,但是为什么IE没有打开链接地址呢。。。
而且链接加多了一条件:
http://www.masamaso.com/goods.php?id=3128&free_msg=1  
http://www.masamaso.com/goods.php?id=3132  
http://www.masamaso.com/goods.php?id=3120 
菜鸟肯请赐教!!!
8 楼 joohnnie 2010-01-18  
用quartz来定时任务
7 楼 sunhj000java 2010-01-18  
li445970924 写道
是不是要每天 10天之前把程序跑起来

呵呵,你掐点撒
6 楼 li445970924 2010-01-18  
是不是要每天 10天之前把程序跑起来
5 楼 sunhj000java 2010-01-18  
mp_juan 写道
建议楼主采用多线程机制实现和url自动分析机制,这样的话可以大大提高效率

现在就是多线程的,每个链接就是一个线程。
4 楼 mp_juan 2010-01-18  
建议楼主采用多线程机制实现和url自动分析机制,这样的话可以大大提高效率
3 楼 sunhj000java 2010-01-18  
gundumw100 写道
这里的配置文件里的链接,比如:http://www.masamaso.com/goods.php?id=3132
难道一个一个写进去?你怎么知道id=3132?

就是一个一个拷进去的,喜欢哪个就把那个给拷进去。
2 楼 gundumw100 2010-01-18  
这里的配置文件里的链接,比如:http://www.masamaso.com/goods.php?id=3132
难道一个一个写进去?你怎么知道id=3132?
1 楼 whaosoft 2010-01-18  
真惭愧 我对这个一点没有研究 唉

相关推荐

    挖金子VC版源码

    《挖金子VC版源码》是一个基于Visual C++(简称VC)开发的简单游戏项目,它提供了完整的工程文件,让开发者能够深入了解游戏的编程实现。这个游戏的目标是模拟经典的游戏玩法,即玩家需要控制角色在关卡中挖掘黄金,...

    挖金子源工程

    《挖金子源工程》是一个基于Visual Studio 2005开发环境的项目,它采用C++编程语言和Microsoft Foundation Classes (MFC)框架来构建一个游戏应用。在这个项目中,开发者利用C++的强大功能和MFC库的便利性,为用户...

    挖金子 双人版 小游戏 pc

    该游戏与单人版挖金子内容相同,但是可以提供双人单击游戏模式,占用运行资源少

    挖金子小游戏

    **挖金子小游戏**是一款基于C++编程语言和Win32 API开发的简单游戏,适合初学者学习和实践。在这款游戏中,玩家的目标是通过控制角色挖掘屏幕上的金子,体验基本的游戏逻辑和交互功能。 **C++语言基础**: 1. 类与...

    挖金子修订版源码和文档

    "挖金子"是一款经典的小游戏,通常涉及物理模拟、动画处理、碰撞检测等基本游戏机制。在新版中,新增的道具功能使得游戏玩法有所变化,玩家可以通过该道具使所有物品升值,这涉及到游戏内的经济系统设计和道具效果的...

    挖金子源代码.rar

    《C语言实现的挖金子小游戏详解》 在IT领域,游戏编程是众多开发者热衷的实践项目之一,它不仅能锻炼编程技能,还能提升对算法和逻辑的理解。本篇文章将详细解析一个用C语言实现的挖金子小游戏的源代码,帮助读者...

    Digger(挖金子)

    Digger,直译挖掘工,游戏一般翻译为挖金子,最早出现可能是FC(红白机)上的老鼠偷粮食。 以后在各个平台都有许多类似的游戏,Smartphone就有一款叫“DoulderDash”此类游戏。 这款Digger并非本人原创,源代码是...

    VC挖金子源代码

    《VC挖金子源代码》是一款基于Visual C++(简称VC)开发的简易游戏,它为初学者提供了学习游戏编程的实例。在这个项目中,你可以深入理解C++编程语言、图形界面设计以及游戏逻辑实现等多个方面的知识。 首先,我们要...

    微信小程序-微信小程序版的扫雷(挖金子),前端代码

    wx-mime 微信小程序版的扫雷(挖金子),前端代码

    挖金子源码(VC项目)

    挖金子源码(VC项目),经典源码,案例,分享给大家,欢迎下载!

    挖金子 辅助 源码

    很好的哦 你们 可以下载看看 非常好用的

    自己编写的挖金子游戏看看吧

    在这款名为“挖金子”的游戏中,我们看到了一个由大四计算机专业学生亲手编写的C++项目。这个游戏的设定是玩家需要避开障碍物,比如中间的青蛙,以及下方移动的小动物,来成功挖掘出金子。尽管游戏的画面可能略显...

Global site tag (gtag.js) - Google Analytics