Java编程技巧:小爬虫程序(转)

news/2024/7/19 11:08:31 标签: 爬虫

原文地址:http://webservices.ctocio.com.cn/java/104/9390604.shtml

马萨玛索(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 getLines() { 
  BufferedReader reader = null; 
  try { 
  reader = new BufferedReader(new InputStreamReader(new FileInputStream(this.fileName))); 
  } catch (FileNotFoundException e) { 
  e.printStackTrace(); 
  } 
  List lines = new LinkedList(); 
  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 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

  写的比较简单,但是挺实用,各位看官莫笑话哈。

 


http://www.niftyadmin.cn/n/1200048.html

相关文章

sencha touch 2 nestlist中获得绑定store中值的办法

最简单的弹出store中的值 listeners: {itemtap: function(nestedList, list, index, target,record,e,eOpts) {var id record.get(id);alert(id);}转载于:https://www.cnblogs.com/fyq891014/archive/2012/05/27/4188870.html

字节码学习(转)

一直在学习Java,碰到了很多问题,碰到了很多关于i和i的难题,以及最经典的String str "abc" 共创建了几个对象的疑难杂症。 知道有一日知道了java的反汇编 命令 javap。现将学习记录做一小结,以供自己以后翻看。如果有错误的地方&a…

通过指针和通过对象存取成员

2012-5-30(恒大和东京FC比赛那天) 在书中,提到了一个问题 Point origin 先前定义一个Point的类 origin.x origin->x 这两种用法到底有什么区别,哪种的耗费较大 1. 如果 x为静态成员,那么x在编译…

linux下find和grep的区别

在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空&#xff0c…

异常性能分析(转)

异常能不能作为控制流,这个争论其实已经存在了很长时间,最近gdpglc同学发的一连四张《验证String是不是整数,用异常作判断怎么了!》的帖子(前三张已经被投为隐藏帖,要看的话可以从第四张进去)令这个争端又一…

jquery中关于return不能退出方法的问题

function test(){ var result true; $(input[type"file"][name"fileField"]).each(function(){ if($(this).val() ! "") {debugger; $.messager.alert(提示:,"请先上传附件","info"); result false; return fals…

bcopy,memccpy,memcpy,memmove,strcpy,strncpy的异同

相关函数bcopy,memccpy,memcpy,memmove,strcpy,strncpy头文件#include定义函数void * memcpy(void * dest ,const void *src, size_t n);函数说明memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存 地址上。…

高效的异常处理框架(转)

原文:https://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念、语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框架,阐述了异常处理的基本原则。并且作者提出了自…