ability to scrape this site (frame and javascript)

Hi all,

First, SS is a great program! thank you!
second, excuse me for my poor english...

I'm new on SS but i look une month ago on forum and SS website for my problem without finding solution.
Well, i'm trying to scrape this site http://www.kiala.be/fr/kplocator/kplist/1480
My problem is to scrape shop hour details joined with shop adress. In fact, i can't how using javascript link to grab opening data...
I tri this:

http://www.kiala.be/fr/kplocator/kplist/~#SEARCH#~?javascript:showhide('KPID','~#KPNUM#~')

unfortunaly without effect...
Any way to do that?

Regards,

John

can't write session variable

Dear Tim,

First of all, your french is really good!
Secondly, thank you for your response!

Below my extractor pattern :

~@NOM@~
~@RUE@~, ~@NUM@~
~@CODE@~ ~@VILLE@~

I find some little errors and i correct it. (see below)

//j'utilise Interpretted Java ci-dessous
import java.util.regex.*;
//I ADD ALL reger BCOSE regex.Pattern IS NOT ENOUGH
import com.screenscraper.common.*;

Pattern p = Pattern.compile("

");
//(I MODIFY THIS PATTERN BCOSE I READ THIS (

Matcher m = p.matcher(scrapeableFile.getContentAsString());

// Si on y trouve un "div" avec ce "ID" (comme on attends)
if (m.find())
{
String details = m.group(1);
// Et maintenant, entrez les "patterns" que vous désirez trouver. Un example suis:

// Celui extraira chaque jour qui liste des heures. Si le jour (comme dimanche) dit "fermé",
// nous n'allons pas trouver des informations avec ce pattern.
Pattern p = Pattern.compile("
]*>(\\w+) ]*>([0-2][0-9]:[0-5][0-9]) ]*>([0-2][0-9]:[0-5][0-9])

");
// I MODIFY (\w+) TO (\\w+) BCOSE SCRIPT DO A ERROR IN RUNNING
Matcher m = p.matcher(details);

while (m.find())
{
session.setVariable(m.group(1).toUpperCase() + "_OPEN", m.group(2));
session.setVariable(m.group(1).toUpperCase() + "_CLOSE", m.group(3));
}
}

So, i try to write all in a file with this script :

FileWriter out = null;

try
{
session.log( "Writing data to a file." );

// Open up the file to be appended to.
out = new FileWriter( "test.txt", true );

// Write out the data to the file.
out.write( dataRecord.get( "ID" ) + "\t" );
out.write( dataRecord.get( "NOM" ) + "\t" );
out.write( dataRecord.get( "RUE" ) + "\t" );
out.write( dataRecord.get( "NUM" ) + "\t" );
out.write( dataRecord.get( "CODE" ) + "\t" );
out.write( dataRecord.get( "VILLE" ) + "\t" );
out.write( session.getVariable( "JEUDI_OPEN" ) );
//ONLY ONE FOR TESTING
out.write( "\n" );

// Close up the file.
out.close();
}
catch( Exception e )
{
session.log( "An error occurred while writing the data to a file: " + e.getMessage() );

And i receive this message :

Untitled Extractor Pattern--DataRecord 3:
CODE=1060
NUM=69
ID=32000938
RUE=Avenue de la Porte de Hal
LINKID=32000938
VILLE=Saint-Gilles
NOM=TOTAL ARGONNE
result: Processing scripts after a pattern application.
Processing script: "New Script"
Processing script: "Write data to a file"
Writing data to a file.
An error occurred while writing the data to a file: null

Why SessionVariable is not writed?

Kind regards

John

Sorry for the trouble!

I'm sorry for my little mistakes in the script.

You are right about the changes you made.

Also, make these changes:

Change
Matcher m = p.matcher(scrapeableFile.getContentAsString());
to
Matcher m = p.matcher(scrapeableFile.getContentAsString().replaceAll("\n|\r",""));

Change
String details = m.group(1);
to
String details = m.group(0);

That should fix the problems! And now you should have sessionVariables so that your FileWriter script will work as expected!

Again, sorry for the trouble. Let me know if you have any more questions or difficulties with the scripts.

Tim

Bad english? Pas de

Bad english? Pas de problem-- J'ai également mauvais français, après pas plus qu'un an au Québec :)

En fait, il me semble plus facile que ça, car tous les détails existes sur la même page.

Les "links" principaux tous ont un extrait de javascript semblable à ce modèl-ci:
"<a href="javascript:showhide('kp_32000893','linkkp_32000893')">PAPYRUS</a>"

Il y existe aussi un "div" avec un "id" de 'kp_32000893'. L'extrait de javascript, il cache les autres "div"s mais révèle l'un de celui dont on a cliqué.

Alors, tout cela était de dire qu'il n'y a pas de besoin de naviguer vers une autre page. Vous pouvez trouver les premiers variables par un "extractor pattern":
(le "pattern" pour "ID" est "\d+". Assurez-vous de marquer l'option "Save to session variable")

Après, invoquez un script "After each pattern application". Ce script devrait être comme celui-ci:

//j'utilise Interpretted Java ci-dessous
import java.util.regex.Pattern;
import com.screenscraper.common.*;

Pattern p = Pattern.compile("

");
Matcher m = p.matcher(scrapeableFile.getContentAsString());

// Si on y trouve un "div" avec ce "ID" (comme on attends)
if (m.find())
{
String details = m.group(1);
// Et maintenant, entrez les "patterns" que vous désirez trouver. Un example suis:

// Celui extraira chaque jour qui liste des heures. Si le jour (comme dimanche) dit "fermé",
// nous n'allons pas trouver des informations avec ce pattern.
Pattern p = Pattern.compile("
]*>(\w+) ]*>([0-2][0-9]:[0-5][0-9]) ]*>([0-2][0-9]:[0-5][0-9])

");
Matcher m = p.matcher(details);

while (m.find())
{
session.setVariable(m.group(1).toUpperCase() + "_OPEN", m.group(2));
session.setVariable(m.group(1).toUpperCase() + "_CLOSE", m.group(3));
}
}

(J'espère que ça marche bien! Je n'ai pas fait des testes :) )

Après ce script, vous allez avoir un sessionVariable pour chaque jour qui liste des heures d'ouverture, nommé après le jour, par exemple: "LUNDI_OPEN" serait "06:30", et "LUNDI_CLOSE" serait "13:30".

C'est un approche bien different-- Laissez-moi savoir si vous avez toujours de troubles quand vous le misez en œuvre.

Tim