免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7651 | 回复: 6
打印 上一主题 下一主题

请教关于perl抓取网页时需要身份验证的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-16 11:41 |只看该作者 |倒序浏览
我在用perl抓取一个网页。而这个网页需要身份验证,会自动跳转到验证身份页面。每次都得输入用户名和密码。我想请问一下如何免除每次都需要输入用户名和密码这一步骤。
  谢谢~~

论坛徽章:
0
2 [报告]
发表于 2007-04-16 11:43 |只看该作者
原帖由 angeler 于 2007-4-16 11:41 发表
我在用perl抓取一个网页。而这个网页需要身份验证,会自动跳转到验证身份页面。每次都得输入用户名和密码。我想请问一下如何免除每次都需要输入用户名和密码这一步骤。
  谢谢~~


分析它的HTTP包头,加上相应的Session或者其他的什么东西。

论坛徽章:
0
3 [报告]
发表于 2007-04-16 11:48 |只看该作者
原帖由 福瑞哈哥 于 2007-4-16 11:43 发表


分析它的HTTP包头,加上相应的Session或者其他的什么东西。



谢谢,你能不能说的具体一点,我不太明白

论坛徽章:
0
4 [报告]
发表于 2007-04-16 11:57 |只看该作者
原帖由 angeler 于 2007-4-16 11:48 发表



谢谢,你能不能说的具体一点,我不太明白


找一个sniffer工具分析一下,在正常情况下服务器和你的浏览器是如何通讯的,然后模拟浏览器就可以了。

论坛徽章:
0
5 [报告]
发表于 2007-04-16 15:00 |只看该作者

用LWP很容易

用LWP模拟一个浏览器,下面是我曾经写的一个脚本,供参考:


  1. #!/usr/bin/perl -w
  2. use strict;
  3. use LWP::Simple;
  4. use LWP;
  5. use HTML::Parse;
  6. use HTTP::Cookies;
  7. use Term::ReadKey;

  8. print "Please enter your username:";
  9. chop( my $user = <stdin> );
  10. print "Please enter your Password: (do not display)\n";
  11. ReadMode 2;
  12. chop( my $password = <stdin> );
  13. ReadMode 0;
  14. my $browser = LWP::UserAgent->new();
  15. $browser->cookie_jar( {} );    # turn on cookies
  16. $browser->agent('Mozilla/4.0 (compatible; MSIE 5.12; Mac_PowerPC)')
  17.   ;                            # simulate popular browser
  18. my $login_url      = 'http://www.gene-regulation.com/login';
  19. my $first_response = $browser->get($login_url);

  20. die "$login_url error: ", $first_response->status_line
  21.   unless $first_response->is_success;
  22. die "Weird content type at $login_url -- ", $first_response->content_type
  23.   unless $first_response->content_type eq 'text/html';

  24. my $login_response = $browser->post(
  25.     $login_url,
  26.     [
  27.         'user'        => $user,
  28.         'password'    => $password,
  29.         'request_uri' => '/index.html',
  30.     ],
  31. );
  32. die "$login_url error: ", $login_response->status_line
  33.   unless $login_response->is_success;
  34. die "Weird content type at $login_url -- ", $login_response->content_type
  35.   unless $login_response->content_type eq 'text/html';

  36. if ( $login_response->content =~ /try again/i ) {
  37.     print "Wrong username or password!\n";
  38.     exit 1;
  39. }
  40. else { print "login OK!\n"; }

  41. open MYFILE, ">>transfac70.html";

  42. my $url       = make_url($_);
  43. my $response2 = $browser->get($url);
  44. my $content_wanted;

  45. if ( $response2->content =~
  46.     /(<pre>.*<\/pre>)/is )    # retain the content between <pre> and </pre>
  47. {
  48.     $content_wanted = $1;
  49. }
  50. else { next; }
  51. $content_wanted =~ s/<H3.*<\/H3>//sg;    # remove the title
  52. print MYFILE $content_wanted;

  53. sub make_url {
  54.     my $base_url =
  55. 'http://www.gene-regulation.com/cgi-bin/pub/databases/transfac/getTF.cgi?AC=';

  56.     if ( $_[0] < 10 ) { return $base_url . 'M0000' . $_[0]; }
  57.     elsif ( $_[0] >= 10 && $_[0] < 100 ) { return $base_url . 'M000' . $_[0]; }
  58.     else                                 { return $base_url . 'M00' . $_[0]; }
  59. }

复制代码

论坛徽章:
0
6 [报告]
发表于 2009-05-11 23:34 |只看该作者
royalzhang, 你是我的救星啊。
一个晚上都在琢磨怎么从 TRANSFAC 下东西,这儿有现成的。谢了!

论坛徽章:
0
7 [报告]
发表于 2011-11-01 11:20 |只看该作者
回复 5# royalzhang

good,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP