包含头部的innerHTML替代方案?
我正在尝试从以下页面提取数据:
这个页面很方便,但效率不高,所有的数据都嵌入在页面的头部,作为一个叫做 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=¶m2=¶m3=¶m4=¶m5=2009-04-22¶m6=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
如果这只是一个一次性的脚本,那么提取这个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
0
用ajax获取那个页面的内容,然后用jquery把返回的文本当成XML来解析。其实很简单,你可以很容易地找到第一个遇到的标签里的文本。
我对jquery有点生疏,要不然我会发一些代码示例。
补充:我假设你是在说在客户端获取csv文件。
1
未经测试:你有没有试着看看 Document.scripts 里面有什么内容?
更新:
出于某种原因,我在使用 Windows 脚本宿主时遇到了很大的困难(不过我不太常用它,抱歉)。无论如何,这里有一段可以正常工作的 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=¶m2=¶m3=¶m4=¶m5=2009-04-22¶m6=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
现在包含了所有在脚本标签内的内容。