注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Bioinformatics home

 
 
 

日志

 
 

LWP::UserAgent  

2010-12-08 09:40:13|  分类: Perl |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

LWP::UserAgent 应该是个大家都很熟悉的模块,做 scraper 所不可缺少的。

如下的 tip 可能对您所有帮助。因为 WWW::Mechanize 是其子类,所以下面的东西 WWW::Mechanize 也是可以使用的。

agent 是浏览器的一个代号,默认 LWP::UserAgent 会把 "libwww-perl/$LWP::VERSION" 当作自己的 agent。而如果某些网站需要一些流行的浏览器版本时(如 Facebook),那我们可以传递浏览器的代号进去。

my $ua = LWP::UserAgent->new(      agent       => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',  );  

如果有些网站是 Mobile 类型的,可以传递 iPhone 或其他的 agent 进去

my $ua = LWP::UserAgent->new(      agent       => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16', # iPhone 3.0  );  

更多的类型可以参考 HTTP::BrowserDetect

默认的 LWP::UserAgent 不开启 cookie, 一般需要登录的网站都需要 cookies,最常见的做法是传递一个 {} 给 cookie_jar

my $ua = LWP::UserAgent->new(      agent       => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',      cookie_jar  => {},  );  

这样会自动创建一个基于内存的 HTTP::Cookies, 如果你知道您的 cookie 所在(比如通过验证码后的 Cookies 文件),可以传递一个 hash 或者 HTTP::Cookies 的实例

my $ua = LWP::UserAgent->new(      agent       => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',      cookie_jar  => { file => "$ENV{HOME}/.cookies.txt" },      # or      # use HTTP::Cookies;      # cookie_jar => HTTP::Cookies->new( file => "$ENV{HOME}/.cookies.txt" ),  );  

我们一般通过 Crypt::SSLeay 来访问 https 网站,所以一般都需要安装此模块(Win32 下建议 ppm install Crypt::SSLeay)。

最后我们讲讲 Proxy.

Proxy 的使用有两种,一种是代码里直接设置,另一种是通过 ENV 设置。

$ua->proxy('http', 'http://user:pass@example.com:9090');  $ua->proxy( ['http', 'https'], 'https://user:pass@127.0.0.1/' );    $ua->env_proxy;  

env_proxy 的使用请参见 LWP::UserAgent 文档。

有时候可能有 socks5 proxy,这时候需要额外安装 LWP::Protocol::http::socks, socks 的 proxy URL 写法如同 http:// 例子如 socks://127.0.0.1:7070/

如果在 proxy 失败之后想去掉 proxy, $ua->no_proxy($domain) 是一种写法,另一种更简单的 hack 方法是

$ua->{proxy} = {};  
  评论这张
 
阅读(3753)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017