您的位置:首页 > 新闻资讯 >文章内容
使用代理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帮助你保护个人隐私。无论是网络爬虫、互联网营销、投票打榜都可以使用。


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


相关文章内容简介
推荐阅读
  • 19 2019-09
    代理IP汇总29条Python操作要点

    我们都知道,Python能够被用于在很多不同方面,像是数据分析、应用开发、游戏、机器人等等。而且随着现在互联网发展越来越快,互联网人才也会受到重视,所以吸引了很多人去学习编程语言

  • 06 2019-03
    代理服务器缓存,提高用户访问速度

    代理服务器有缓存的功能,可以提高访问速度,因此可以使用游戏的加速,降低网络延迟。今天我们就来看看关于代理服务器的缓存功能,web缓存的种类有哪些?下面一起跟小编去瞧一瞧。

  • 18 2019-10
    刷票可以怎么更换IP地址?

    网络营销投票是经常用到的一个方式,但是由于受到IP的限制,往往一个IP只能够投一次票。如果大家想要实现多次投票,那么就需要对IP地址进行变换才行。以下是几种经过验证可用的方法。

  • 22 2020-06
    代理IP爬虫代码分享

    使用代理IP爬取网站,我们能够从不同类型的网站来获取信息,但是面对不同网站的爬取策略,我们需要进行不同的规划。通过一个具体的案例,大家可以感受一下爬取的过程是如何实现的。

  • 16 2020-01
    高匿代理ip对电商的作用

    在电商流行起来之前,我们做生意首先浮现在脑海中的就是要拥有一个实体店铺,而店铺的选址必须要选在有固定客流量的地方。但是如今电商横行,虽然不能完全摒除实体店铺,但是也应紧跟

  • 24 2019-04
    找爬虫代理要关注IP数量、高并发、多终端

    找爬虫代理要关注IP数量、高并发、多终端,这三个方面,为什么呢?其实很多人购买爬虫代理时,都会把IP可用率作为购买第一参考因素。其实市面上的的IP资源基本都是租用代理拨号服务器,

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

大客户经理微信

微信公众号

微信公众号

回到顶部