我需要登录到一个站点,解析 HTML 页面并提取特定 HTML 标记之间的值。
我可以在不需要登录数据的页面上成功执行此操作。我正在使用 HTML::Parser 类。
LWP::UserAgent 提供了 cookie_jar 方法来通过从文件中加载来设置 cookie。但是,我想在脚本本身中对 cookie 值进行硬编码。那可能吗?我在网上找不到任何工作示例。
这是我的代码:
请原谅在几个地方的变量声明中缺少“我的”。我匆忙写了这段代码,试图理解 LWP::UserAgent 中 Cookie 处理的概念。
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Request::Common;
use LWP::UserAgent;
use HTTP::Response;
use HTTP::Cookies;
package IdentityParse;
use base "HTML::Parser";
my $title_flag=0;
my $title="";
my $cookie_jar= HTTP::Cookies->new;
$cookie_jar->clear;
$cookie_jar->set_cookie(Name=Value); #Example, PHPSESSID=710c7aa60aa5cacdc40028ef79de24b2
sub text{
my($self,$text)=@_;
if($title_flag)
{
$title.=$text;
}
}
sub start{
my($self,$tag,$attr,$attrseq,$origtext)=@_;
if($tag =~ /^title$/i)
{
$title_flag=1;
}
}
sub end{
my($self,$tag,$origtext)=@_;
if($tag =~ /^title$/i)
{
$title_flag=0;
}
}
my $url="http://sitename.com/users/index.php";
my $ua= LWP::UserAgent->new();
$ua->agent('NeonFlash');
$ua->timeout(30);
$ua->cookie_jar($cookie_jar);
my $req= HTTP::Request->new(GET => $url);
my $res= ($ua->request($req))->content;
my $p = new IdentityParse;
$p->parse($res);
$p->eof;
print "The title of the web page is: ".$title."\n";
概括:
我正在使用 HTML::Parser 类来解析 HTTP 响应 HTML 页面。为了读取标签之间的值,我重写了 HTML::Parser 的方法、开始、文本和结束。
cookie 值以 Key 和 Value 的形式传递。我知道,虽然我自己没有尝试过,但可以从文本文件中加载 cookie。但我想知道我们是否也可以这样做。
谢谢。