您的位置:首页 > 新闻资讯 >文章内容
使用代理IP制作刷票系统(下)
来源:互联网 作者:admin 时间:2019-09-26 10:09:21

  昨天机灵代理给大家介绍了怎么去制作一个刷票系统,用了2篇文章的篇幅,但是由于代码部分比较冗长,为了大家不一下子被海量信息劝退,我们划分了用3篇来解说。今天就带来这个系列的最后一篇,看完这个系列之后,你也能够刷票不求人了。相关阅读:使用代理IP制作刷票系统(上)使用代理IP制作刷票系统(中)


使用代理IP制作刷票系统


  3、IPCollectTask.java


  package com.hust.grid.leesf.thread;

  import java.io.IOException;

  import java.util.ArrayList;

  import java.util.List;

  import java.util.TimerTask;

  import java.util.concurrent.BlockingQueue;

  import java.util.concurrent.LinkedBlockingQueue;

  import org.jsoup.Jsoup;

  import org.jsoup.nodes.Document;

  import org.jsoup.nodes.Element;

  import org.jsoup.select.Elements;

  import com.hust.grid.leesf.bean.IpInfo;

  public class IPCollectTask extends TimerTask {

  private BlockingQueue<IpInfo> ipInfoQueue; // 连接生产者与消费者的阻塞队列

  private List<IpInfo> historyIpLists; // 记录已经获取的ip信息

  public IPCollectTask(BlockingQueue<IpInfo> ipInfoQueue) {

  this.ipInfoQueue = ipInfoQueue;

  this.historyIpLists = new ArrayList<IpInfo>();

  }

  /**

  * 获取www.xicidaili.com的ip地址信息

  */

  public void getXiCiDaiLiIpLists() {

  String url = "http://www.xicidaili.com/";

  String host = "www.xicidaili.com";

  Document doc = getDocumentByUrl(url, host);

  // 解析页面的ip信息

  parseXiCiDaiLiIpLists(doc);

  }

  /**

  * 解析页面的ip信息

  *

  * @param doc

  */

  public void parseXiCiDaiLiIpLists(Document doc) {

  Elements eleLists = doc.getElementsByTag("tbody");

  Element tbody = eleLists.get(0); // 获取tbody

  Elements trLists = tbody.children();

  Element ele = null;

  for (int i = 0; i < trLists.size(); i++) {

  if ((i % 22 == 0) || (i % 22 == 1)) { // 去掉不符合条件的项

  continue;

  }

  ele = trLists.get(i);

  Elements childrenList = ele.children();

  String ipAddress = childrenList.get(1).text();

  int port = Integer.parseInt(childrenList.get(2).text());

  String location = childrenList.get(3).text();

  String anonymousType = childrenList.get(4).text();

  String type = childrenList.get(5).text();

  String confirmTime = childrenList.get(6).text();

  IpInfo ipInfo = new IpInfo(ipAddress, port, location,

  anonymousType, type, confirmTime);

  putIpInfo(ipInfo);

  }

  }

  /**

  * 将ip信息放入队列和历史记录中

  *

  * @param ipInfo

  */

  private void putIpInfo(IpInfo ipInfo) {

  if (!historyIpLists.contains(ipInfo)) { // 若历史记录中不包含ip信息,则加入队列中

  // 加入到阻塞队列中,用作生产者

  try {

  ipInfoQueue.put(ipInfo);

  } catch (InterruptedException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  // 加入历史记录中

  historyIpLists.add(ipInfo);

  }

  }

  /**

  * 根据网页Document解析出ip地址信息

  *

  * @param doc

  */

  private void parseKuaiDaiLiIpLists(Document doc) {

  Elements eleLists = doc.getElementsByTag("tbody");

  Element tbody = eleLists.get(0); // 获取tbody

  Elements trLists = tbody.children(); // 获取十条ip记录

  for (Element tr : trLists) { // 遍历tr

  Elements tdElements = tr.children(); // tr中的td包含了具体的信息

  String ipAddress = tdElements.get(0).text();

  int port = Integer.parseInt(tdElements.get(1).text());

  String anonymousType = tdElements.get(2).text();

  String type = tdElements.get(3).text();

  String getPostSupport = tdElements.get(4).text();

  String location = tdElements.get(5).text();

  String responseSpeed = tdElements.get(6).text();

  String confirmTime = tdElements.get(7).text();

  IpInfo ipInfo = new IpInfo(ipAddress, port, location,

  anonymousType, type, confirmTime, getPostSupport,

  responseSpeed);

  putIpInfo(ipInfo);

  }

  }

  /**

  * 根据提供的url和host来获取页面信息

  *

  * @param url

  * @param host

  * @return

  */

  private Document getDocumentByUrl(String url, String host) {

  Document doc = null;

  try {

  doc = Jsoup

  .connect(url)

  .header("User-Agent",

  "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0")

  .header("Host", host).timeout(5000).get();

  } catch (IOException e) {

  e.printStackTrace();

  }

  return doc;

  }

  /**

  * 获取http://www.kuaidaili.com/free/的ip

  */

  private void getKuaiDaiLiFreeIpLists() {

  // 第一次访问,需解析总共多少页

  String baseUrl = "http://www.kuaidaili.com/free/inha/";

  String host = "www.kuaidaili.com";

  Document doc = getDocumentByUrl(baseUrl, host);

  // 解析ip信息

  parseKuaiDaiLiIpLists(doc);

  Element listNav = doc.getElementById("listnav");

  // 获取listnav下的li列表

  Elements liLists = listNav.children().get(0).children();

  // 获取含有多少页的子元素

  Element pageNumberEle = liLists.get(liLists.size() - 2);

  // 解析有多少页

  int pageNumber = Integer.parseInt(pageNumberEle.text());

  // 拼接成其他页的访问地址

  for (int index = 1; index <= pageNumber; index++) {

  baseUrl = baseUrl + index;

  doc = getDocumentByUrl(baseUrl, host);

  parseKuaiDaiLiIpLists(doc);

  // 休眠一秒

  fallSleep(1);

  }

  }

  /**

  * 获取www.kuaidaili.com/proxylist/的ip

  */

  private void getKuaiDaiLiIpLists() {

  int start = 1;

  String baseUrl = "http://www.kuaidaili.com/proxylist/";

  String host = "www.kuaidaili.com";

  while (start <= 10) { // 爬取10页

  String url = baseUrl + start + "/";

  Document doc = getDocumentByUrl(url, host);

  // 解析ip信息

  parseKuaiDaiLiIpLists(doc);

  start++;

  // 休眠一秒

  fallSleep(1);

  }

  }

  /**

  * 进行休眠

  */

  private void fallSleep(long seconds) {

  try {

  Thread.sleep(seconds * 1000);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

  @Override

  public void run() {

  // getKuaiDaiLiFreeIpLists();

  System.out.println("IPCollect task is running");

  getKuaiDaiLiIpLists();

  getXiCiDaiLiIpLists();

  }

  public BlockingQueue<IpInfo> getIpInfoQueue() {

  return ipInfoQueue;

  }

  public static void main(String[] args) {

  BlockingQueue<IpInfo> queue = new LinkedBlockingQueue<IpInfo>();

  IPCollectTask task = new IPCollectTask(queue);

  Thread thread = new Thread(task);

  thread.start();

  try {

  Thread.sleep(30 * 1000);

  } catch (InterruptedException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  System.out.println("queue size is " + queue.size());

  try {

  while (!queue.isEmpty()) {

  System.out.println(queue.take());

  }

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("historyList size is " + task.historyIpLists.size());

  }

  }


  4、VoteThread.java


  package com.hust.grid.leesf.thread;

  import java.io.IOException;

  import java.util.concurrent.BlockingQueue;

  import org.apache.http.HttpEntity;

  import org.apache.http.HttpHost;

  import org.apache.http.HttpResponse;

  import org.apache.http.client.ClientProtocolException;

  import org.apache.http.client.HttpClient;

  import org.apache.http.client.methods.HttpGet;

  import org.apache.http.conn.params.ConnRoutePNames;

  import org.apache.http.impl.client.DefaultHttpClient;

  import org.apache.http.params.HttpConnectionParams;

  import org.apache.http.params.HttpParams;

  import org.apache.http.util.EntityUtils;

  import com.hust.grid.leesf.bean.IpInfo;

  public class VoteThread extends Thread {

  private BlockingQueue<IpInfo> ipInfoQueue;

  public VoteThread(BlockingQueue<IpInfo> ipInfoQueue) {

  this.ipInfoQueue = ipInfoQueue;

  }

  @Override

  public void run() {

  HttpClient client = new DefaultHttpClient();

  HttpParams params = client.getParams();

  HttpConnectionParams.setConnectionTimeout(params, 10000);

  HttpConnectionParams.setSoTimeout(params, 15000);

  HttpResponse response = null;

  HttpGet get = null;

  HttpEntity entity = null;

  HttpHost proxy = null;

  while (true) {

  IpInfo ipInfo = null;

  try {

  ipInfo = ipInfoQueue.take();

  } catch (InterruptedException e1) {

  // TODO Auto-generated catch block

  e1.printStackTrace();

  }

  proxy = new HttpHost(ipInfo.getIpAddress(), ipInfo.getPort());

  client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,

  proxy);

  get = new HttpGet(

  "http://www.hnxdf.com/vote/iRadio_vote.asp?VoTeid=215");

  get.addHeader("Host", "www.hnxdf.com");

  get.addHeader("User-Agent",

  "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0");

  try {

  response = client.execute(get);

  entity = response.getEntity();

  byte[] bytes = EntityUtils.toByteArray(entity);

  // 对响应内容编码格式进行转化,统一成utf-8格式

  String temp = new String(bytes, "gbk");

  byte[] contentData = temp.getBytes("utf-8");

  System.out.println(new String(contentData));

  System.out.println("-----------------------------------");

  } catch (ClientProtocolException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  }


  投票系统总结:


  此系统很简单,想清楚思路之后很快就能够写出代码,系统运行时,由于代理IP站点提供的免费IP质量不是太高,有效的IP地址还是很少,效果不是特别理想,所以还是建议大家使用高质量的付费代理IP。机灵代理,自建200+机房,数万拨号线路,提供企业级HTTP代理服务,IP覆盖全国200+城市,高匿名代理IP帮助你保护个人隐私。无论是网络爬虫、互联网营销、投票打榜都可以使用。


  此系统功能也很简单,大家都可以定制属于自己的投票系统。


相关文章内容简介
推荐阅读
  • 27 2020-04
    影响代理IP速度的因素

    代理IP是现代社会中很多人经常使用的上网方式,特别是对于一些专业网络营销人员来说,代理IP资源是他们工作必不可少的工具之一。在选择使用代理IP时,除了IP的稳定性和安全性以外,IP速

  • 10 2019-04
    大量来源不明的IP地址,这些都是代理IP吗?

    有时候,网站突然来了大量来源不明的IP地址,这些都是代理IP吗?我们平常使用的IP地址都是192.168开头的,有时候还遇到一些看起来很奇怪的IP地址,这些IP地址是不是真的?

  • 14 2019-06
    遇到封IP用代理ip访问

    遇到封IP用代理ip访问,这是最有效的方法了,不管是做什么,总之如果都是IP限制,封IP,换个IP就能解决问题了。

  • 23 2019-09
    从事网络工作为什么要用代理IP?

    为什么开展互联网工作,做网络营销需要用到代理IP?代理IP在这当中起到的作用是什么呢?

  • 25 2020-09
    怎样使用代理IP安全上网

    目前市面上的代理IP网络资源品种繁多,但使用方法万变不离其宗。第一步我们充分利用搜索关键词"免费代理IP""代理IP""HTTP代理IP"寻找一款可以用IP网络资源;随后在电脑internet选择项验证IP是不

  • 17 2020-11
    选择ip代理要注意的地方

    在网络中修改ip地址的时候,虽然现在操作起来已经非常简单了,不过还是有一些需要大家注意的地方。

在线咨询
大客户经理
大客户经理
1829380381
13316264505

大客户经理微信

微信公众号

微信公众号

回到顶部