2013-08-03 5 views
0

저는 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> &#44; <span itemprop="postalCode">(.*?)<\/span> &#44; <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"; 

답변

4

이 점이 open의 3 매개 변수 양식을 사용 모든의 성공을 테스트

  • 항상use warnings뿐만 아니라 항상

  • use strict으로 도움이 될 것입니다 open 전화를 걸고 t를 포함하는 문자열로 죽습니다. 그는 내장 변수 $! 당신이 을 알 수 있도록 오픈은 HTML을 구문 분석 절대로 사용 정규 표현식을

  • 실패하지 왜. 제대로 일을하고 XPath

  • 항상이 같은 데이터를 추출하여 해당 사이트의 서비스 약관 내에 있는지 확인하여 데이터의 내용에 간단하게 액세스 할 수 있도록 같은 HTML::TreeBuilder::XPath 등의 여러 모듈이 있습니다 .

마지막 지점과 관련하여 대다수 사이트는 자동 액세스 및 데이터 복사를 금지합니다. Yell.com도 마찬가지입니다. 그들의 conditions of use은 이것을 말한다.

당신은 웹 사이트 ... 모니터하거나 웹 사이트 또는 콘텐츠를 복사 할 수있는 자동화 된 수단을 사용하여 사용할 수 없습니다 ...

그래서 당신이 무엇을하고 있는지 법적 처벌의 가능성을 엽니 다.

+0

페이지의 소스 코드를 붙여 넣은 다음 동일한 질문을하면 괜찮을 것입니다. 나는 단지 모든 데이터를 어떻게 격식시킬 수 있는지 학습 목적을 요구하고 있습니다. 그것은 첫 번째 최고 기록을 잘 작동합니다. – user1586957

+0

는'HTML :: TreeBuilder :: XPath'를 시도 할 것입니다. 그것에 대한 번호 자습서가 적습니다. – user1586957