저는 Perl 초보자이며 Perl을 사용하여 웹 스크래핑에 열정적입니다. 몇 시간을 보낸 후 나는 yell.com
에서 회사 이름, 주소 및 전화 번호를 긁어 모으기위한 아래 코드를 작성했습니다. 스크립트가 잘 작동하고 하나의 레코드를 성공적으로 수집했습니다 (1 페이지에서 1/15).Perl 웹 스크래핑
첫 페이지의 10 개 회사를 한 번에 다 긁어서 어떻게 다른 페이지로 이동할 수 있는지에 대한 소중한 의견이 필요합니다.
use strict;
use Data::Dumper;
use LWP::Simple; # from CPAN
use JSON qw(decode_json); # from CPAN
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
my $header = "company_name|Address|Telphone";
open (CH, ">output.csv");
print CH "$header\n";
my $url = "http://www.yell.com/ucs/UcsSearchAction.do?keywords=Engineering+consulatants&location=United+Kingdom&scrambleSeed=13724563&searchType=&M=&bandedclarifyResults=&ssm=1";
$mech->get($url);
my $con = $mech->content();
my $res = "";
############ for company name ##########
if ($con =~ /<a data-omniture="LIST:COMPANYNAME" href="\/biz\/ross-davy-associates-grimsby-901271213\/" itemprop="name">(.*?)<\/a>/is) {
$res = $1;
}
else {
$res = "Not_Match";
}
############### for address #########
my ($add1, $add2, $add3, $add4, $add) = ("", "", "", "", "");
if ($con =~ /<span itemprop="streetAddress">(.*?)<\/span> <span itemprop="addressLocality">(.*?)<\/span> , <span itemprop="postalCode">(.*?)<\/span> , <span itemprop="addressRegion">(.*?)<\/span>/is) {
$add1 = $1;
$add2 = $2;
$add3 = $3;
$add4 = $4;
$add = $1.$2.$3.$$;
}
else {
$add = "Not_Match";
}
########### telephone ##########
my $tel="";
if ($con =~ /<li data-company-item="telephone" class="last"> Tel: <strong>(.*?)<\/strong> <\/li>/is) {
$tel = $1;
}
else {
$tel = "Not_Match";
}
print "==$res===$add===$tel==\n";
print CH "$res|$add|$tel\n";
페이지의 소스 코드를 붙여 넣은 다음 동일한 질문을하면 괜찮을 것입니다. 나는 단지 모든 데이터를 어떻게 격식시킬 수 있는지 학습 목적을 요구하고 있습니다. 그것은 첫 번째 최고 기록을 잘 작동합니다. – user1586957
는'HTML :: TreeBuilder :: XPath'를 시도 할 것입니다. 그것에 대한 번호 자습서가 적습니다. – user1586957