sohu社区(http://club.sohu.com/main.php),经常有一些不错的连载的帖子,少则几千个回复,多则可以上万个,可是最有用最想看的楼主的帖子也就几十个,从这些成千上万的帖子中,一个个找搂主的帖子实在困难重重,不光手累眼累,主要是时间浪费不起!
提了好几次意见,要求增加“只看楼主”的功能,但现在还是没有。

没办法只有自己动手了,写了这个Perl程序,自动抓取所有楼主的帖子保存下来,轻轻松松的欣赏。

注:执行Perl程序需要Perl解释器,其下载地址:(http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl)
,在左边找到《Windows》条目,其下面的《AS package》或者《MSI》任意一个下载安装就行了!

下面是抓取帖子的Perl程序,记事本保存为1.pl,双击打开或右键`打开方式`->`Perl解释器`。
#-----------------------------------------------------

#! perl
use warnings;
use strict;
use IO::Socket;
use Tk;

my $url = '';
my $saveFilePath = 'C:/'; #这里文件路径是用来存储抓取的内容
my $saveFileName = '';
my $username = '';  #可以不抓楼主的,在这里给出用户呢称
#------------------------------------------------------
my $nullurl1='1.帖子已经被删除';
my $nullurl2='2.URL或者参数错误';
#-----------------GUI----------------------------------
my $top = new MainWindow(-title=>"Please Copy-Paste:");
$top->Label(-text=>"http://")->pack(-side=>'left',-expand=>0);
my $text = $top->Text(qw(-height 1))->pack(-side=>'left',-expand=>0);
$top->Button(-text=>"Go",-command=>sub{$url=$text->Contents;$top->destroy;})->pack();
MainLoop;
#------------------------------------------------------
sub main
{
    #print "Please Copy-Paste:/nhttp://" unless($url);
    #$url=<STDIN> unless($url);chomp($url);
    $url='http://'.$url if ($url !~ m!^http://!);print "/n"x5,"Prase... $url";
    my $tempFileName=join('',localtime);open(F,">$saveFilePath$tempFileName")||die("Can't open file $!");print F "$url/n/n";
    my ($urlbeg,$urlend) = $url =~ /(.*-)/d(-.*)/;die("URL error!/t$url/n") unless($urlbeg || $urlend);
    for(my $page=0; parsePage($urlbeg.$page.$urlend,/*F); $page+=12){}
    $saveFileName.=".htm";close F;rename("$saveFilePath$tempFileName","$saveFilePath$saveFileName");
    print '-'x34,"/nParse Success!< $saveFilePath$saveFileName >/n",'-'x34;
#    Tk::MessageBox->new(-message=>"Parse Success!< $saveFilePath$saveFileName >");
}main;

sub parsePage{
    my ($urlarg,$F) = @_;
    my ($host,$file) = $urlarg =~ m!http://([^/]+)(/[^/#]*)!;
    die "Host error/n" unless ($host);
    die "File error/n" unless ($file);
    if ($host)
    {
    my $socket = IO::Socket::INET->new(PeerAddr => $host,PeerPort => 'HTTP(80)');
    return 1 unless( defined($socket) );
    print $socket "GET $file HTTP/1.0/n/n";
    $_=<$socket>;return 0 if (/404 Not Found/);
    my ($finder,$effectiveUrl)=(0,0);
    
    while( my $line=<$socket> )
    {
        $line =~ s//r//g;
        if (!$finder){return 0 if($line =~ /$nullurl1/);}#|| $line =~ /$nullurl2);
        $saveFileName=$1 if("" eq $saveFileName && $line=~//<title/>(.*)/<//title/>/);
        if ($line =~ /.*/<script src=(http:.*)/>/<//script.*/)
        {
       ($finder,$effectiveUrl) = (1,$1);
       my ($host,$file) = $effectiveUrl =~ m!http://([^/]+)(/[^/#]*)!;
       if ($host)
       {
           print "Parse...  $file";
           my $socket1 = IO::Socket::INET->new(PeerAddr => $host,PeerPort => 'HTTP(80)');
           next unless( defined($socket1));
           print $socket1 "Get $effectiveUrl HTTP/1.0/n/n";
           my ($finded,$content,$inputdate)=(0);
           while( <$socket1> )
           {
          $_ =~ s//r//g;
          $content = $1 if (/.*var.* body_.*=/'(.*)/'/);
          return (print "Server:Access control configuration prevents your request"),0 if (/403 Forbidden/i);
          $username=$1 if (!$username && /var nickname_.*=/'(.*)/'/);
          $finded=1 if (/var nickname_.*=/'$username/'/);
          $inputdate=$1,print "/t[Post: $1]/n" if (/var inputdate_.*=/'(.*)/'/);
           }
           print $F "$inputdate/t$effectiveUrl/n/n$content/n/n/n" if ($finded);
       } 
      }
    }
   }
    return 1;
} # parsePage

实现sohu社区′只看楼主′的功能,抓取连载帖子中楼主的所有帖子相关推荐

  1. 主键SQL教程–如何在数据库中定义主键

    Every great story starts with an identity crisis. Luke, the great Jedi Master, begins unsure - " ...

  2. mysql 主键值向后递增1_mysql中的主键递增

    CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL , PRIMARY ...

  3. mysql 导入主键冲突_MySQL 处理插入过程中的主键唯一键重复值的解决方法

    本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IG ...

  4. java中主函数_(基础)java中的主函数

    Java中的主函数 1.由JVM调用:JVM通过类名直接调用主函数(静态方法) 2.主函数的形参是一个字符串数组: String[] args 3.运行主函数时,如果没有向其传递参数,JVM会自动创建 ...

  5. python语言的主网址-怎么用Python提取域名中的主域名

    从一个域名里面提取主域名,初想起来,貌似很简单,不就是数点[.]的个数吗?取最后一个点前后的字符串,那 abc.txt 是域名吗?那再加个验证,加上国家码,.com,.cn,.org结尾的才算,那这个 ...

  6. mysql 主键唯一,MySQL。关键表中的主键。唯一ID还是多个唯一键?

    Primary key in relational tables. Composite primary key or unique primary key in those pure relation ...

  7. jar中没有主清单属性【解决办法】

    <main><script type="text/javascript"> var blogSensitiveWords = ""; j ...

  8. Python抓取熊猫TV分类下的主播人气排名

    抓取LOL分类下的主播人气排名情况: """ 抓取熊猫TV当前分类主播人气排名 """ import re from urllib impo ...

  9. mysql中的主键关键字_MySQL主键(PRIMARY KEY)

    "主键(PRIMARY KEY)"的完整称呼是"主键约束".MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键 ...

最新文章

  1. 程序、进程、线程的关系
  2. (转载)keras使用入门及3D卷积神经网络资源
  3. 关于RF中类似于异常(TRY语句)情况的处理
  4. python插件化设计_Python打造出适合自己的定制化EclipseIDE
  5. Red hat下使用automake自动配置wxWidgets的makefile
  6. 【转】二、VTK用于QT的安装
  7. 手把手,快速搭建 Cocos2d-HTML5 开发调试环境
  8. centos7 源码安装redis
  9. Java加密压缩文件
  10. 台式计算机m9870t,新闻中心 ——驱动之家:您身边的电脑专家
  11. 计算机桌面维护面试题,100 | 运维常见面试题
  12. Amos26程序安装及注意事项
  13. arcgis怎么压缩tif文件_PDF文件怎么压缩到最小?这个方法能最快速压缩!
  14. MATLAB----小波去噪
  15. NPN型三极管基础知识解析
  16. win10 internet 信息服务器,Win10无internet访问权限怎么解决?Win10无网络解决方法
  17. Commit cannot be completed since the group has already rebalanced and assign
  18. 安装和开启 魔改bbr
  19. D - Petya and Array(树状数组,二分)
  20. ❤️❤️HarmonyOS(鸿蒙)全网最全资源汇总,吐血整理,赶紧收藏!❤️❤️

热门文章

  1. 英文地址所用到的楼,单元的英文对照表
  2. 抓包实践:ping本机IP 和 ping 127.0.0.1真的不同吗
  3. 计算地球上两点之间的俯仰角和方位角
  4. 阿里联手新浪发微博淘宝版 暂停与微信相关应用
  5. 2022-2028全球与中国硼硅酸盐玻璃管市场现状及未来发展趋势
  6. 远光软件毕伟:由紧随到引领,坚定技术自信自强
  7. seqkit根据基因id_[基因组工具]seqkit的使用
  8. Linux 添加开机音乐
  9. MSD3683QTA芯片介绍
  10. Wiki is flat