2013-08-03 163 views
0

我是一個Perl的初學者,我熱愛的網絡使用Perl刮。花了幾個小時後,我寫了下面從yell.com刮的公司名稱,地址和電話號碼的代碼。該腳本工作正常,我成功收集了一條記錄(從第1頁1/15)。Perl的網頁抓取

我需要你關於我怎樣才能湊所有十家公司在第一頁中一氣呵成的寶貴建議,讓我可以移動到其他頁的數據。

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

這點應有助於

  • 始終use warnings以及use strict

  • 始終使用open三個參數的形式,測試成功open呼叫,並且與包括噸的字符串死他內置變量$!,讓你知道爲什麼打開HTML解析失敗

  • 決不使用正則表達式。有幾個模塊,如HTML::TreeBuilder::XPath該做的工作做好,讓簡單的訪問數據的內容,使用XPath

  • 始終確保提取這樣的數據是有問題的網站的服務條款中。

關於最後一點,大多數網站禁止任何形式的自動訪問和複製他們的數據。 Yell.com也不例外。他們的conditions of use這樣說。

不能使用本網站...使用任何自動化的手段來監視或複製網站或它的內容...

所以,你在做什麼,都會讓你更法律起訴的可能性。

+0

如果我粘貼頁面的源代碼,並問你同樣的問題,將被罰款。我只是要求學習的目的,如何能夠獲得所有數據。它可以正常工作於第一名。 – user1586957

+0

將嘗試'HTML :: TreeBuilder作爲:: XPath'。但是關於它的教程卻很少。 – user1586957