Альтернатива innerhtml, который включает в себя заголовок? - PullRequest
0 голосов
/ 25 мая 2009

Я пытаюсь извлечь данные со следующей страницы:

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

Ответы [ 4 ]

1 голос
/ 25 мая 2009

Не проверено: Вы пытались посмотреть, что содержит Document.scripts ?

UPDATE:

По какой-то причине у меня возникают огромные трудности с тем, чтобы заставить это работать с помощью 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 теперь содержит все в тегах скрипта.

0 голосов
/ 25 мая 2009

Благодаря Синану (это в основном его решение, переведенное на Python).

импорт win32com.client

время импорта, импорт 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)

Веб-страница = 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 голосов
/ 25 мая 2009

Если это всего лишь один сценарий, то извлечение этих данных 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 голосов
/ 25 мая 2009

получить исходный код этой страницы, используя ajax, и проанализировать текст ответа, как XML, используя jquery. Достаточно просто получить текст первого тега, с которым вы столкнетесь внутри

У меня нет связи с jquery, иначе я бы опубликовал примеры кода.

РЕДАКТИРОВАТЬ: я предполагаю, что вы говорите о получении CSV на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...