把以前博客的东西夜迁移过来吧,这个是以前公司做的,原来放在csdn里面,先切过来。

用多进程实现的 wget多进程抓取的实现,有问题联系我 (微博:偶是周亮)

  1. #!/bin/bash
  2. url_path="-";
  3. WGET_TIMECOUNT=;
  4. WGET_TIME=;
  5. FORK_SLEEP_TIME=;
  6. ONEURL_SLEEP_TIME=;
  7. SPIDER_PID_NUM=;
  8. function usage(){
  9. echo "usage:spider.sh -u url_path -d page_store_dir";
  10. exit ;
  11. }
  12. function version(){
  13. echo "same-source-tools-spider-1.0.0";
  14. exit ;
  15. }
  16. while getopts l:u:d:t:T:s:S:p: OPTION
  17. do
  18. case $OPTION
  19. in
  20. u)url_path=${OPTARG};;
  21. d)spider_dir=${OPTARG};;
  22. t)WGET_TIMECOUNT=${OPTARG};;
  23. T)WGET_TIME=${OPTARG};;
  24. s)FORK_SLEEP_TIME=${OPTARG};;
  25. S)ONEURL_SLEEP_TIME=${OPTARG};;
  26. p)SPIDER_PID_NUM=${OPTARG};;
  27. l)LOG_PATH=${OPTARG};;
  28. h)usage;;
  29. v)version;;
  30. /?)usage;;
  31. esac
  32. done
  33. touch ${LOG_PATH};
  34. #检查抓取文件是否存在
  35. if [ -e ${url_path} ]; then
  36. echo "spider test: ${url_path} is exist" ;
  37. else
  38. echo "url_path spider test: ${url_path} is not exist";
  39. exit ;
  40. fi
  41. #检查存储网页的目录是否存在
  42. if [ -e ${spider_dir} ]; then
  43. echo "spider test: ${spider_dir} is exist" ;
  44. else
  45. echo "spider_dir spider test: ${spider_dir} is not exist";
  46. exit ;
  47. fi
  48. #清除原来的url文件
  49. url_first_path="${spider_dir}/url_0";
  50. if [ -e ${url_first_path} ]; then
  51. rm ${spider_dir}/url_*;
  52. fi
  53. #创建url多进程抓取文件
  54. for ((i=;i<${SPIDER_PID_NUM};i++));do
  55. {
  56. touch ${spider_dir}/url_${i};
  57. }
  58. done
  59. no=;
  60. #向url多进程抓取文件中写入抓取的url
  61. cat ${url_path} | while read line
  62. do
  63. echo $line >> ${spider_dir}/url_${no};
  64. no=$(($no+));
  65. if [ $no -ge ${SPIDER_PID_NUM} ]; then
  66. no=;
  67. fi;
  68. done
  69. #开始多进程抓取
  70. for ((i=;i<${SPIDER_PID_NUM};i++));do
  71. sleep ${FORK_SLEEP_TIME};
  72. {
  73. url_path="${spider_dir}/url_${i}";
  74. if [ -e $url_path ]; then
  75. cat ${url_path} | /
  76. while read url
  77. do
  78. sleep ${ONEURL_SLEEP_TIME};
  79. url_md5=`echo ${url} | md5sum | awk -F" " '{print $1}'`;
  80. wget "${url}" -o ${LOG_PATH}_${url_md5} -O ${spider_dir}/${url_md5} -t ${WGET_TIMECOUNT} -T ${WGET_TIME};
  81. #wget ${url} -o ${LOG_PATH}_${url_md5} -a ${LOG_PATH} -O ${spider_dir}/${url_md5} -t ${WGET_TIMECOUNT} -T ${WGET_TIME};
  82. dateFlag=`date +"%Y%m%d-%H:%M:%S"`;
  83. if [ $? -eq ]; then
  84. echo "${dateFlag} NOTICE:spiderwgetsuccess ${url}" ;
  85. else
  86. echo "${dateFlag} ERROR:spiderwgeterror ${url}" ;
  87. rm ${spider_dir}/${url_md5};
  88. fi
  89. done
  90. else
  91. continue;
  92. fi
  93. } &
  94. done
  95. wait

wget多进程抓取的实现的更多相关文章

  1. 使用wget工具抓取网页和图片 成功尝试

    使用wget工具抓取网页和图片 发表于1年前(2014-12-17 11:29)   阅读(2471) | 评论(14) 85人收藏此文章, 我要收藏 赞7 wget 网页抓取 图片抓取 目录[-] ...

  2. 使用wget工具抓取网页和图片 及 相关工具几个

    想保存一些网页,最后找到这 wget 的 shell脚本,虽然不是太理想,亲测可用呢. 使用wget工具抓取网页和图片   来源 https://my.oschina.net/freestyletim ...

  3. wget全站抓取命令

    wget -r -p -np -k http://www.freebuf.com/ 忽视,避开robots.txt,加一个-e robots=off 用wget避开robots.txt的下载限制 wg ...

  4. PHP多进程编程(3):多进程抓取网页的演示

    我们知道,从父进程到子经常的数据传递相对比较容易一些,但是从子进程传递到父进程就比较的困难. 有很多办法实现进程交互,在php中比较方便的是 管道通信.当然,还可以通过 socket_pair 进行通 ...

  5. Python多进程方式抓取基金网站内容的方法分析

    因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList ...

  6. Python爬虫【三】利用requests和正则抓取猫眼电影网上排名前100的电影

    #利用requests和正则抓取猫眼电影网上排名前100的电影 import requests from requests.exceptions import RequestException imp ...

  7. Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转

    数据来源:数据挖掘入门与实战  公众号: datadw scrapy_jingdong[9]- 京东爬虫.基于scrapy的京东网站爬虫,保存格式为csv.[9]: https://github.co ...

  8. Python 3.6 抓取微博m站数据

    Python 3.6 抓取微博m站数据 2019.05.01 更新内容 containerid 可以通过 "107603" + user_id 组装得到,无需请求个人信息获取: 优 ...

  9. wget整站抓取、网站抓取功能;下载整个网站;下载网站到本地

    wget -r   -p -np -k -E  http://www.xxx.com 抓取整站 wget -l 1 -p -np -k       http://www.xxx.com 抓取第一级 - ...

随机推荐

  1. omnibus方式部署gitlab

    omnibus方式部署gitlab Posted on 2015 年 1 月 10 日   4233 Views 这几天折腾搭建git服务器,选择了比较流行的gitlab,一开始就直奔一键安装脚本去了 ...

  2. Ubuntu之修改用户名和主机名

    记得曾几何时,想把自己电脑的“乌班兔儿”取个响亮的名字,但是问了很久度娘和谷哥,都要我把当前用户删除了(userdel -r xxx),重新建一个用户(adduser xxx),但是,我的电脑是所有环 ...

  3. 基于Platinum库的DMS实现(android)

    接上篇博文:基于Platinum库的DMR实现(android) 文章讲述了如何使用Platinum库实现DMR 今天同样使用该库,来讲解一下DMS的实现 关于该库如何编译,请参考这篇博文:NDK下 ...

  4. [C#]DataTable常用操作总结

    ].RowState == DataRowState.Unchanged)        {            //Your logic        }        //⑩Convert to ...

  5. Spring中自己主动装配

    自己主动装配 在我们了解过constructor-arg和property装配中.都须要配置对应的属性和值或者引用,假设在比較复杂的项目中.就会使得XML的配置变得复杂,自己主动装配能够使用较少的配置 ...

  6. 改动网卡IP信息

    改动网卡IP信息的情况有非常多种,只是从大体上能够分为两种,一种是暂时改动,重新启动网络服务后改动便会失效:一种是永久改动,重新启动网络服务后才会生效.一般暂时改动应用在暂时的动作中,我们通过分类名字 ...

  7. linux下的进程、网络、性能监控命令

    进程监控 端口   1)netstat -anp | grep xxx   2)lsof  -i:<port> 句柄    lsof  -n | grep xxxx 线程栈   1)gst ...

  8. C-JAVA 论坛

    http://www.cnblogs.com/lpjia/ JAVA黑马 http://java.itheima.com/java/service/javacourse.shtml

  9. Linux学习之more命令

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...

  10. js创建对象的几种常用方式小结

    第一种模式:工厂方式  var lev=function(){ return "666"; }; function Parent(){ var Child = new Object ...