包含标题的innerhtml的替代方案?

时间:2009-05-25 13:01:00

标签: python html css dom com

我正在尝试从以下页面中提取数据:

http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?param1=&param2=&param3=&param4=&param5=2009-04-22&param6=37#

其中,方便且低效,包括作为头文件中嵌入的csv文件的所有数据,设置为名为gs_csv的变量。

如何提取这个? Document.body.innerhtml跳过数据所在的标题,包含标题的替代方法是什么(或者更好的是与gs_csv相关联的值)?

(对不起,对这一切都是新的,我一直在搜索大量的文档,并尝试了很多文档,但到目前为止还没有任何工作)。


感谢Sinan(这主要是他的解​​决方案转录为Python)。

import win32com.client 

import time 

import os 

import os.path

ie = Dispatch("InternetExplorer.Application") 

ie.Visible=False 

ie.Navigate("http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?param1=&param2=&param3=&param4=&param5=2009-04-22&param6=37#")

time.sleep(20)

webpage=ie.document.body.innerHTML

s1=ie.document.scripts(1).text 

s1=s1[s1.find("gs_csv")+8:-11]

scriptfilepath="c:\FO Share\bmreports\script.txt" 

scriptfile = open(scriptfilepath, 'wb') 

scriptfile.write(s1.replace('\n','\n')) 

scriptfile.close()

ie.quit

4 个答案:

答案 0 :(得分:1)

未经测试:您是否尝试查看Document.scripts包含的内容?

<强>更新

出于某种原因,我在使用Windows Scripting Host工作时遇到了极大的困难(但是,我不经常使用它,道歉)。无论如何,这是有效的Perl源:

use strict;
use warnings;

use Win32::OLE;
$Win32::OLE::Warn = 3;

my $ie = get_ie();

$ie->{Visible} = 1;

$ie->Navigate(
    'http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?'
    .'param1=&param2=&param3=&param4=&param5=2009-04-22&param6=37#'
);

sleep 1 until is_ready( $ie );

my $scripts = $ie->Document->{scripts};

for my $script (in $scripts ) {
    print $script->text;
}

sub is_ready { $_[0]->{ReadyState} == 4 }

sub get_ie {
    Win32::OLE->new('InternetExplorer.Application', 
        sub { $_[0] and $_[0]->Quit },
    );
}

__END__

C:\Temp> ie > output

output现在包含脚本标记内的所有内容。

答案 1 :(得分:0)

使用ajax获取该页面的源代码,并使用jquery解析响应文本,如XML。应该简单地获取在

中遇到的第一个标签的文本

我与jquery没有联系,或者我会发布代码示例。

编辑:我假设您正在谈论在客户端获取csv。

答案 2 :(得分:0)

如果这只是一次性脚本,那么将这个csv数据提取出来就像这样简单:

import urllib2

response = urllib2.urlopen('http://www.bmreports.com/foo?bar?')
html = response.read()
csv = data.split('gs_csv=')[1].split('</SCRIPT>')[0]

#process csv data here

答案 3 :(得分:0)

感谢Sinan(这主要是他的解​​决方案转录为Python)。

导入win32com.client

导入时间导入操作系统

导入os.path

ie = Dispatch(“InternetExplorer.Application”)ie.Visible = False

ie.Navigate( “http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?param1=&param2=&param3=&param4=&param5=2009-04-22&param6=37#”)

time.sleep(20)

网页= ie.document.body.innerHTML

s1 = ie.document.scripts(1).text s1 = s1 [s1.find(“gs_csv”)+ 8:-11]

scriptfilepath =“c:\ FO Share \ bmreports \ script.txt”

scriptfile = open(scriptfilepath,'wb')

scriptfile.write(s1.replace('\ n','\ n'))

scriptfile.close()

ie.quit