在其他論壇看了很多關於Perl模組的安裝,其實有時候很容易出現安裝失敗。
尤其是在WINDOWS上,比如可以使用CPAN,PPM等工具方式。在命令列
中輸入CPAN, 彈出CPAN> ,然後可以輸入INSTALL 模組名,比如我要安裝LWP::UserAgent::ProxyAny
輸入install LWP::UserAgent::ProxyAny,可是經常會有錯誤,這個方式非常麻煩。於是exit;轉到PPM,
輸入PPM,是可以彈出PPM的工具列,但是出現錯誤的幾率也很大,而且反應比較慢。怎麼辦呢。
上面的一個模組是用來進行Proxy 伺服器設定的,比如有些網站,在國內被禁用了,我們可以通過一些國外的Proxy 伺服器,
進行訪問,這個方法會比較容易。
怎麼做呢。很簡單,在http://search.cpan.org上搜尋ProxyAny, 下載LWP-UserAgent-ProxyAny-1.02.tar.gz,
解壓縮後,有8個檔案。
對於網路上的說法,如果在WINDOWS下,你需要先安裝make.exe,放入到system32目錄下,可以執行。然後make,
接著make test,有些模組就可以成功了。但是這一模組上面的兩種方式都失敗。
我發現了一個非常簡單的方法,上面模組的意思是在LWP目錄下,找UserAgent子目錄,然後在這一子目錄下找到ProxyAny.pm檔案,
我們就可以在相應的位置直接建立需要的目錄UserAgent,然後在這個檔案夾下把ProxyAny.pm複製到這裡,接著測試代碼,發現可以
使用了。是不是很方便。
代碼如下:
#! perl #LWP::UserAgent::ProxyAny - A LWP UserAgent supports both HTTP_PROXY and IE proxy use LWP::UserAgent::ProxyAny; open(PROXY,"<F:/freeProxy1.txt") or die $!; #freeProxy1.txt檔案裡面是類似24.98.120.7:8085這樣的Proxy 位址列表。 my $ua = LWP::UserAgent::ProxyAny->new; $ua->env_proxy; my $response = $ua->get('http://www.ncbi.nlm.nih.gov/pubmed'); while(<PROXY>){ $proxy = $_.""; $ua->set_proxy_by_name($proxy); if($response->is_success){ print "有效IP代理為:".$_."/n"; print $response->content; #or whatever }else{ print "無效的IP代理為:".$_; # die $response->status_line; } $ua->set_proxy_by_name("No"); } # $ua->set_proxy_by_name("24.98.120.7:8085"); # print $response->content; # or set proxy by specified name close PROXY;
可以把地址修改下,就可以使用代理上網了。
上面是得到相應地址的原始碼,進行資料抓取。
上面的Perl指令碼,還是不完善,其實不用專門設定代理,只要有$ua->env_proxy這句,表示使用代理,似乎就可以直接存取了,太方便了。