Могу ли я передать источник веб-страницы из curl в perl? - PullRequest
1 голос
/ 06 декабря 2011

Я анализирую исходный код многих веб-сайтов, целой огромной сети с тысячами страниц. Теперь я хочу искать вещи в perĺ, я хочу найти количество вхождений ключевого слова.

Для парсинга веб-страниц я использую curl и перенаправляю вывод в «grep -c», который не работает, поэтому я хочу использовать perl. Может ли Perl полностью использоваться для сканирования страницы?

* 1005 Е.Г. *

cat RawJSpiderOutput.txt | grep parsed | awk -F " " '{print $2}' | xargs -I replaceStr curl replaceStr?myPara=en | perl -lne '$c++while/myKeywordToSearchFor/g;END{print$c}' 

Объяснение: В текстовом файле выше у меня есть пригодные для использования и неиспользуемые URL. С помощью "Grep parsed" я получаю полезные URL. С помощью awk я выбираю 2-й столбец, содержащий чистый используемый URL. Все идет нормально. Теперь к этому вопросу: с помощью Curl я извлекаю исходный код (тоже добавляя некоторый параметр) и перенаправляю весь исходный код каждой страницы в perl для подсчета вхождений «myKeywordToSearchFor». Я хотел бы сделать это в Perl, только если это возможно.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

Используется только Perl (не проверено):

use strict;
use warnings;

use File::Fetch;

my $count;
open my $SPIDER, '<', 'RawJSpiderOutput.txt' or die $!;
while (<$SPIDER>) {
    chomp;
    if (/parsed/) {
        my $url = (split)[1];
        $url .= '?myPara=en';
        my $ff = File::Fetch->new(uri => $url);
        $ff->fetch or die $ff->error;
        my $fetched = $ff->output_file;
        open my $FETCHED, '<', $fetched or die $!;
        while (<$FETCHED>) {
            $count++ if /myKeyword/;
        }
        unlink $fetched;
    }
}
print "$count\n";
0 голосов
/ 06 декабря 2011

Попробуйте что-нибудь более похожее,

   perl -e 'while(<>){my @words = split ' ';for my $word(@words){if(/myKeyword/){++$c}}} print "$c\n"'

т.е.

   while (<>)               # as long as we're getting input (into “$_”)
   { my @words = split ' '; # split $_ (implicit) into whitespace, so we examine each word
     for my $word (@words)  #  (and don't miss two keywords on one line)
     { if (/myKeyword/)     # whenever it's found,
       { ++$c } } }         # increment the counter (auto-vivified)
   print "$c\n"             # and after end of file is reached, print the counter

или, прописанное strict -подобное

   use strict;
   my $count = 0;
   while (my $line = <STDIN>) # except that <> is actually more magical than this
   { my @words = split ' ' => $line;
     for my $word (@words)
     { ++$count; } } }
   print "$count\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...