知乎爬虫(二)

来源:互联网 发布:软件高级工程师好考吗 编辑:程序博客网 时间:2024/05/01 17:06

JAVA爬虫--增加多线程爬取


1.项目更新

继续上一篇文章之后,其实项目一直在更新,但是博客却没有跟上,过了好几个月才更新~我们的项目目前增加了多线程爬取功能,在Initial.java里配置的dayCount和threadNum,来控制爬取的天数和线程数目,比如目前配置的是从当前天数往前爬取100天,分给10个线程去爬,每个线程爬取10天的量,这样速度就快多啦~如果想改爬取的天数和线程数目就在Initial.java里改动。

2.具体代码

在Initial.java里还增加了如下变量:
    public static ArrayList<Long> timeArray = new ArrayList<Long>();//unix时间戳数组,分给线程分别去爬    public static ArrayList<Integer> threadTimeArray = new ArrayList<Integer>();//线程时间分配数组,已分配的线程不会继续分配        public static ArrayList<String> tinyFoxUrls = new ArrayList<String>(); //已经爬取到的urls        public static UrlQueue[] zhiHuUrlsQueue = new UrlQueue[threadNum];    //总线程数个UrlQueue,一个线程一个UrlQueue    
其中,timeArray记录着各个线程的“时间限值”,比如假设第一个线程thread0爬取今天之前的10天,那么十天前的那一天的unixTime值即为thread0的时间限值,thread0从今天的unixTime开始爬,直到链接里的starttime值小于时间下限即停止爬取:
ContentParser.java:
if(Long.valueOf(data_time) >= end_time) {        moreContentUrl += "?start=" + data_time + "&_xsrf=" + xsrf;                }
这样我们就可以控制线程在特定的时间区间里爬啦~

threadTimeArray其实就是一个标记值,因为实际运行下来发现,同一个线程可能会领取多次时间限值,所以就标记一下,如果已经领取了时间限值那么就不能再领取了。

tinyFoxUrls(这个名字随便起的...)会记录爬取到的urls,这样就不会在url.txt里写重复的url。

zhiHuUrlsQueue是个UrlQueue的数组,记录着每个线程自己要爬取的url,这样各个线程就不会干扰到其他的线程。

3.存在的问题

项目里现在用了比较多的全局变量,感觉非常不好,希望后面能有时间重构下。。
另外想添加下载图片的功能,但是发现直接发问题的请求需要登录网站才能获取到源码了,但是如果直接登录网站又需要验证码,还没想到好的方法,如果大家有好的想法请大家不吝赐教~项目源码已更新:https://github.com/StormSpirit22/ZhihuSpider
非常浅显的代码,博主只是个菜鸟,但是如果每天有一点成长我就很开心了~


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荣耀4c一直亮屏怎么办 华为手机返回键失灵怎么办 荣耀6p死机了怎么办 荣耀6主板烧坏了怎么办 虚拟运营商倒闭了号怎么办 买到二次放号怎么办 新运动鞋鞋穿着有点紧怎么办 一件代发被买家退货后怎么办? 洗了翻毛的鞋子怎么办 猫眼竹芋泡根了怎么办 双线花叶子卷了怎么办 华为云收藏满了怎么办 小米6云空间满了怎么办 华为云存储已满怎么办 苹果云备份空间不足怎么办 oppor9指纹与密码忘记怎么办 oppo显示密码格式不对怎么办 oppo云服务密码忘了怎么办 小米云内存满了怎么办 id储存空间满了怎么办 苹果手机邮箱服务器连接失败怎么办 苹果查看id闪退怎么办 域名卖出去后涉及赌博怎么办 发票认证后对方作废了怎么办 手机在屋里没信号怎么办 百度云上传文件和谐怎么办 收货地址写错了怎么办 阿里巴巴国际版出现加密令牌怎么办 淘宝寄货到转运仓拒收怎么办 淘宝已发货买家申请退货怎么办 买家给了一个差评不接电话怎么办 卖家单号填错了怎么办 拼多多虚假发货买家怎么办 买家退款后又收到货怎么办 买家确认收货已超时怎么办 淘宝买家不确认收货怎么办 买家快递单号填错怎么办 买家不确认收货不评价怎么办 淘宝不给改地址怎么办 淘宝快递发货后申请退款怎么办 摄影公司收钱后跑了怎么办