2009-05-25 49 views
0

我想從以下頁面提取數據:替代包含標題的innerhtml?

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相關的值)是什麼? (對不起,這些都是新鮮事,我一直在搜索大量的文檔,並嘗試了很多,但目前爲止還沒有發揮作用)。


感謝思南(這主要是他的解​​決方案轉錄成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 
+0

(鏈接省略,因爲我是一個新手。) 如果有幫助,這是一個Python腳本,如下 進口win32com.client 進口時間 進口OS 進口os.path中 即=調度( 「InternetExplorer.Application」) ie.Visible =真 即.Navigate(「http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?param1=¶m2=¶m3=¶m4=¶m5=2009-04-22¶m6=37#」) 時間。 sleep(20) webpage = ie.document.body#.innerHTML logfilepath =「p:\\ my documents \\ Python \\ webpagetmp.txt」 LOG_FILE =開放(LOGFILEPATH, 「WB」) log_file.write(網頁) log_file.close() 打印網頁 ie.quit – Brendan 2009-05-25 13:06:50

+0

你可以做一個HTTP請求,得到整個字符串,和grep頭? – DonkeyMaster 2009-05-25 15:45:43

回答

1

未經測試:你嘗試看什麼Document.scripts包含?

UPDATE:

出於某種原因,我有得到這個使用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=&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現在包含腳本標籤內的一切。

+0

嗨思南, 正如我所說,我對這一切都是全新的。嘗試ie.document.scripts返回>。語法應該是什麼? 謝謝 – Brendan 2009-05-25 13:27:59

+0

它是一個集合:ie.document.scripts.item [0]應該在文檔中保存第一個腳本。我的IE8給我的問題,所以我無法測試。 – 2009-05-25 14:01:38

+0

ie.document.scripts.item [0]給出了一個錯誤: TypeError:'instancemethod'對象不可訂閱 – Brendan 2009-05-25 14:09:52

0

使用ajax獲取該頁面的源代碼,並使用jquery解析XML之類的響應文本。它應該很簡單,足以讓你遇到的第一個標籤的文本

我與jquery脫節,或者我會張貼代碼示例。

編輯:我假設你說的是在客戶端獲取csv。

+0

這是一個靜態網頁,所以我不知道ajax與它有什麼關係? 似乎過於複雜,我可以從完整的HTML源代碼中提取它,如果我知道如何返回它? – Brendan 2009-05-25 13:32:53

0

如果這只是一次性的腳本,然後exctracting這個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

嗨randle, 我今天早上正在看那種方法,但是這是來自公司防火牆/代理與NTLM身份驗證。我嘗試了幾種不同的方法和例子,以通過代理獲得python的工作,但後來放棄了,並認爲使用IE腳本來獲取文檔會更容易。從我讀過的內容來看,Python和NTLM代理不會一起玩得很好。 我認爲應該有一些相當於innerhtml,返回完整的HTML,所以認爲這將是快速和容易這樣做... – Brendan 2009-05-25 14:09:03

+0

@Brendan:您可以使用NTLMAPS規避NTLM身份驗證在任何應用程序。它是用python編寫的。 http://ntlmaps.sourceforge.net/ – nosklo 2009-05-25 16:26:51

+0

nosklo,ntlmaps(據我所見)是一個本地代理,它通過NTLM Lan代理進行路由,但必須一直運行到從另一個應用程序到localhost的字段請求。我可能是錯的,但它有點尷尬,不便攜。 – Brendan 2009-05-26 12:52:36

0

由於思南(這主要是他的解​​決方案轉錄成Python)。

進口win32com.client

進口時間導入OS

進口os.path中

即=調度( 「InternetExplorer.Application」)ie.Visible =假

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。腳本(1)的.text S1 = S1 [s1.find( 「gs_csv」)+ 8:-11]

scriptfilepath = 「C:\ FO共享\ bmreports \ script.txt」

腳本文件=開(scriptfilepath,把wb)

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

scriptfile.close()

ie.quit

+0

你應該刪除這個答案,並使用正確的降價將它結合到原始帖子中(文本框旁邊的問號告訴你如何正確地發佈代碼等)。至於投票給我,如果你不能,但沒有問題,但你應該至少能夠標記解決你的問題的答案。 – 2009-05-25 16:22:25