java实现多线程使用多个代理ip的方式爬取网页页面内容

项目的目录结构

核心源码:

package cn.edu.zyt.spider;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import cn.edu.zyt.spider.model.SpiderParams;
import cn.edu.zyt.spider.queue.UrlQueue;
import cn.edu.zyt.spider.worker.SpiderWorker;

public class SpiderStarter {

    public static void main(String[] args){

        System.setProperty("java.net.useSystemProxies", "true");
        System.setProperty("http.proxyHost", "113.128.9.37");
        System.setProperty("http.proxyPort", "9999");
        System.setProperty("https.proxyHost", "113.128.9.37");
        System.setProperty("https.proxyPort", "9999");

        // 初始化配置参数
        initializeParams();

        // 初始化爬取队列
        initializeQueue();

        // 创建worker线程并启动
        for(int i = 1; i <= SpiderParams.WORKER_NUM; i++){
            new Thread(new SpiderWorker(i)).start();
        }
    }

    /**
     * 初始化配置文件参数
     */
    private static void initializeParams(){
        InputStream in;
        try {
            in = new BufferedInputStream(new FileInputStream("conf/spider.properties"));
            Properties properties = new Properties();
            properties.load(in);

            // 从配置文件中读取参数
            SpiderParams.WORKER_NUM = Integer.parseInt(properties.getProperty("spider.threadNum"));
            SpiderParams.DEYLAY_TIME = Integer.parseInt(properties.getProperty("spider.fetchDelay"));

            in.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 准备初始的爬取链接
     */
    private static void initializeQueue(){
        // 例如,需要抓取天下粮仓信息,根据链接规则生成URLs放入带抓取队列http://www.cofeed.com/national_1.html

        for(int i = 0; i < 3; i += 1){
            UrlQueue.addElement("http://www.cofeed.com/national_" + i+".html");
        }
    }
}

实现效果图:

由于页面代码较多就不一一粘贴了,获取完整源码可在博客下方留言哈

原文地址:https://www.cnblogs.com/zyt-bg/p/10637350.html

时间: 2024-11-10 01:33:13

java实现多线程使用多个代理ip的方式爬取网页页面内容的相关文章

Java中使用多线程、curl及代理IP模拟post提交和get访问

Java中使用多线程.curl及代理IP模拟post提交和get访问 菜鸟,多线程好玩就写着玩,大神可以路过指教,小弟在这受教,谢谢! [java] view plaincopyprint? /** * @组件名:javaDemo * @包名:javaDemo * @文件名:Jenny.java * @创建时间: 2014年8月1日 下午5:53:48 * @版权信息:Copyright ? 2014 eelly Co.Ltd,小姨子版权所有. */ package javaDemo; impo

Java中使用多线程、curl及代理IP模拟post提交和get訪问

Java中使用多线程.curl及代理IP模拟post提交和get訪问 菜鸟,多线程好玩就写着玩.大神能够路过不吝赐教.小弟在这受教.谢谢! 很多其它分享请关注微信公众号:lvxing1788 ~~~~~~ 切割线扭起来 ~~~~~~ /** * @组件名:javaDemo * @包名:javaDemo * @文件名称:Jenny.java * @创建时间: 2014年8月1日 下午5:53:48 * @版权信息:Copyright ? 2014 eelly Co.Ltd,小姨子版权全部. */

java爬虫爬取的html内容中空格(&amp;nbsp;)变为问号“?”的解决方法

用java编写的爬虫,使用xpath爬取内容后,发现网页源码中的 全部显示为?(问号),但是使用字符串的replace("?", ""),并不能替换,网上找了一下,大概意思是显示的这个问号其实并不是问号,是乱码,主要是由于编码的问题导致的. 解决方法如下: //替换抓取内容中“ ”变为问号的问题 try { intro = new String(intro.getBytes(),"GBK").replace('?', ' ').replace('

java爬取网页上qq号,邮箱号等

import java.io.BufferedReader;import java.io.FileReader;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.util.regex.Matcher;import java.util.regex.Pattern; public class GetMail { public static void main(S

python多线程爬取网页

#-*- encoding:utf8 -*- ''' Created on 2018年12月25日 @author: Administrator ''' from multiprocessing.dummy import Pool as pl import csv import requests from lxml import etree def spider(url): header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1

python requests库爬取网页小实例:ip地址查询

ip地址查询的全代码: 智力使用ip183网站进行ip地址归属地的查询,我们在查询的过程是通过构造url进行查询的,将要查询的ip地址以参数的形式添加在ip183url后面即可. #ip地址查询的全代码 import requests url="http://m.ip138.com/ip.asp?ip=" try: r=requests.get(url+'202.204.80.112') r.raise_for_status() r.encoding=r.apparent_encodi

打造IP代理池,Python爬取Boss直聘,帮你获取全国各类职业薪酬榜

爬虫面临的问题 不再是单纯的数据一把抓 多数的网站还是请求来了,一把将所有数据塞进去返回,但现在更多的网站使用数据的异步加载,爬虫不再像之前那么方便 很多人说js异步加载与数据解析,爬虫可以做到啊,恩是的,无非增加些工作量,那是你没遇到牛逼的前端,多数的解决办法只能靠渲染浏览器抓取,效率低下,接着往下走 ? 千姿百态的登陆验证 从12306的说说下面哪个糖是奶糖,到现在各大网站的滑动拼图.汉子点击解锁,这些操作都是在为了阻止爬虫的自动化运行. 你说可以先登录了复制cookie,但cookie也有

网络爬虫:使用多线程爬取网页链接

前言: 经过前面两篇文章,你想大家应该已经知道网络爬虫是怎么一回事了.这篇文章会在之前做过的事情上做一些改进,以及说明之前的做法的不足之处. 思路分析: 1.逻辑结构图 上图中展示的就是我们网络爬虫中的整个逻辑思路(调用Python解析URL,这里仅仅作了简略的展示). 2.思路说明: 首先.我们来把之前思路梳理一下.之前我们採用的两个队列Queue来保存已经訪问过和待訪问的链接列表,并採用广度优先搜索进行递归訪问这些待訪问的链接地址.并且这里使用的是单线程操作. 在对数据库的操作中.我们加入了

java通过Jsoup爬取网页(入门教程)

一,导入依赖 <!--java爬虫--> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.3</version> </dependency> <!--httpclient依赖--> <dependency> <groupId>org.apa