免费注册 查看新帖 |

Chinaunix

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

【求教】perl可以抓取多页的asp动态网页内容吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-18 19:52 |只看该作者 |倒序浏览
20可用积分
【求教】perl可以抓取多页的asp动态网页内容吗?

想抓取一个网站的网页内容,网站是用asp写的,里面嵌了javascript的函数来取其他页面。

有没有办法可以把每一页的内容都抓下来哈?

ulmer tx提供的方法非常简便,具体方法如下:

通过在lwp的UserAgent中设置相应的页参数'me_page' => $me_page,实现了抓取相应的页面!!
代码如下:
use LWP 5.64;  
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;

my $browser = LWP::UserAgent->new;  
$me_page=4;#取第四页
my $response = $browser->post( $url,    [ 'me_page' => $me_page,  # the Altavista query string      
        #'goto_page1' => $goto_page1   
        ]  
        );  
print $response->content;

谢谢各位兄弟的帮助!

[ 本帖最后由 oldv 于 2008-9-21 19:36 编辑 ]

最佳答案

查看完整内容

Hi,it's not difficult.the key string is:The value="2" is just current page. Using regexp to fetch this value and add it to1to asign the value to "" just like javascriptfunction viewPage(ipage){ ..} does it. that's meaning to put the parameter me_page= in url querirs in addtion.Using LWP module to do that.

论坛徽章:
0
2 [报告]
发表于 2008-09-18 19:52 |只看该作者

回复 #7 oldv 的帖子

Hi,
it's not difficult.
the key string is:
<input type="text" name="goto_page1" value="2" style="bord..">

The value="2" is just current page. Using regexp to fetch this value and add it to1
to asign the value to "<input type="hidden" name="me_page">" just like javascript
function viewPage(ipage){ ..} does it.
that's meaning to put the parameter me_page=<PAGE_WANTO_GO> in url querirs
in addtion.

Using LWP module to do that.

论坛徽章:
0
3 [报告]
发表于 2008-09-18 21:33 |只看该作者

回复 #1 oldv 的帖子

不行吧, js取其它页面的内容是浏览器执行的.
比较笨的方法,是先抓这个页面,然后解析之,看js要取什么页面,然后抓之

论坛徽章:
0
4 [报告]
发表于 2008-09-18 22:03 |只看该作者
当然可以抓, 不过就跟楼上说的一样,你得先人工分析JS会访问哪些页面.

一般来说js会访问哪些页面都是分析HTML/JS源代码得到

如果你觉得麻烦,那么就用监控工具看一下浏览器发出去的请求头部, 比如firefox里可使用http live header

可以看到请求的头部之后当然就知道JS请求的是什么URL了. 一般来说这些URL都是有规律的, 变化的只不过是URL里面的某个参数而已.

论坛徽章:
0
5 [报告]
发表于 2008-09-19 11:49 |只看该作者
我觉得试试那个OLE的模块是不是会更好点呢?直接调IE,前几天记不得在哪里看过类似的东西

论坛徽章:
0
6 [报告]
发表于 2008-09-19 12:25 |只看该作者
....OLE.。。没有必要吧。 再说也不好用

论坛徽章:
0
7 [报告]
发表于 2008-09-19 16:04 |只看该作者
呵!看来遇到分页的问题啦!

论坛徽章:
0
8 [报告]
发表于 2008-09-19 19:19 |只看该作者
谢谢诸位兄弟的回帖。
首页最末尾的html代码如下:

<tr height="24">
          <td align="right">   |  <a href='javascript:viewPage(1)' language ='javascript'>首页</a>  |  <a href='javascript:viewPage(1)' language ='javascript'>上页</a>  |  <a href='javascript:viewPage(3)' language ='javascript'>下页</a>  |  <a href='javascript:viewPage(163)' language ='javascript'>尾页</a>
            共查到 4073 条记录,显示第2页/总163页 转到第
            <input type="text" name="goto_page1" value="2" style="border: 1px solid rgb(200,200,200)" size=2 maxlength=3>
            页
            <input style="height:20;WIDTH: 42px;font-family:Arial" class="s02" hideFocus type="button" value="GoTo" name="cmd_goto" onClick="javascript:viewPage(document.all.goto_page1.value);">
            <form action="product_list.asp" method=post name="frm_page">
              <input type="hidden" name="me_page">
              <input type="hidden" name="action" value=>
              <input type="hidden" name="root" value=>
              <input type="hidden" name="pro_brand" value=>
              <input type="hidden" name="pro_in_voltage" value=>
              <input type="hidden" name="pro_out_voltage" value=>
              <input type="hidden" name="pro_power" value=>
              <input type="hidden" name="type_id" value=>
              <input type="hidden" name="keyword" value=>
                                <input type="hidden" name="model" value=>
                                <input type="hidden" name="pro_size" value="">
              
            </form> <script language="javascript">
     function viewPage(ipage){
        document.frm_page.me_page.value=ipage;
        document.frm_page.submit();        
     }

我觉得它是通过给viewPage函数传参数来取相应页面的。

论坛徽章:
0
9 [报告]
发表于 2008-09-19 19:30 |只看该作者
原帖由 xiaoshengcaicai 于 2008-9-18 22:03 发表
当然可以抓, 不过就跟楼上说的一样,你得先人工分析JS会访问哪些页面.

一般来说js会访问哪些页面都是分析HTML/JS源代码得到

如果你觉得麻烦,那么就用监控工具看一下浏览器发出去的请求头部, 比如firefox里 ...


用http live header抓到:
Content-Length: 113
me_page=4&action=&root=&pro_brand=&pro_in_voltage=&pro_out_voltage=&pro_power=&type_id=&keyword=&model=&pro_size=

应该是通过me_page来设置页数,然后取出相应的页。

象这样的情况该如何用本地脚本自动实现呢?

论坛徽章:
0
10 [报告]
发表于 2008-09-19 19:32 |只看该作者
原帖由 bulletming 于 2008-9-19 11:49 发表
我觉得试试那个OLE的模块是不是会更好点呢?直接调IE,前几天记不得在哪里看过类似的东西

如果直接调ie,是否也存在无法取到下一页的情况?

或者说,调ie取得首页之后,再怎么逐次取到下页呢?这是问题的关键啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP