<?xml version="1.0" encoding="windows-1252"?>
<node id="873713" title="how to quickly parse 50000 html documents?" created="2010-11-25 14:16:38" updated="2010-11-25 14:16:38">
<type id="115">
perlquestion</type>
<author id="873652">
brengo</author>
<data>
<field name="doctext">
&lt;p&gt;Hey monks, I'd like to fill a database with values that I grab from 50000 html documents. There is no API available and I can't decide what method to use to parse the html structure.&lt;/p&gt;

&lt;p&gt;Right now I have saved all the files locally (later on a direct access via web would be great) and they look like this:&lt;/p&gt;
&lt;code&gt;
... (the usual html, head, body tags, a table, some text)

&lt;table width=75%&gt;&lt;tr&gt;&lt;td width=50%&gt;&lt;table width=95%&gt;&lt;tr&gt;&lt;td width=45% valign=top&gt;
&lt;table width=100% cellspacing=0 cellpadding=0&gt;&lt;tr bgcolor=#DFDFDF&gt;&lt;td colspan=2 height=30&gt;&lt;font size=4&gt;&lt;center&gt;tool1_name&lt;/center&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#999999&gt;&lt;td width=70%&gt;
&lt;b&gt;heading_1&lt;/b&gt;
&lt;/td&gt;&lt;td width=30%&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;drill diameter:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;936&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;drill depth:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;20&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;drill speed:&lt;/font&gt;&lt;/td&gt;							&lt;td&gt;&lt;font size=1&gt;4&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;drill material:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;506&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;height:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;502&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;width:&lt;/font&gt;&lt;/td&gt;							&lt;td&gt;&lt;font size=1&gt;6&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;angle:&lt;/font&gt;&lt;/td&gt;								&lt;td&gt;&lt;font size=1&gt;2.76&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;cooling liquid:&lt;/font&gt;&lt;/td&gt;								&lt;td&gt;&lt;font size=1&gt;14&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;manufactured in:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;27&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;lane code:&lt;/font&gt;&lt;/td&gt;								&lt;td&gt;&lt;font size=1&gt;76&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;quality test 1:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;581 (11.4%)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;quality procedure:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;19,021&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;quality test 2:&lt;/font&gt;&lt;/td&gt;								&lt;td&gt;&lt;font size=1&gt;843 (90.1%)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;package worth:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;$257,524&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;single unit worth:&lt;/font&gt;&lt;/td&gt;									&lt;td&gt;&lt;font size=1&gt;$90,945&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;colour:&lt;/font&gt;&lt;/td&gt;							&lt;td&gt;&lt;font size=1&gt;48&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;coating:&lt;/font&gt;&lt;/td&gt;							&lt;td&gt;&lt;font size=1&gt;2,602&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;br&gt;
&lt;table width=100% cellspacing=0 cellpadding=0&gt;&lt;tr bgcolor=#999999&gt;&lt;td width=70%&gt;
&lt;b&gt;sells&lt;/b&gt;
&lt;/td&gt;&lt;td width=30%&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor=#DFDFDF&gt;&lt;td&gt;&lt;font size=1&gt;sold this month:&lt;/font&gt;&lt;/td&gt;						&lt;td&gt;&lt;font size=1&gt;118&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor=#CCCCCC&gt;&lt;td&gt;&lt;font size=1&gt;sold in plant A:&lt;/font&gt;&lt;/td&gt;
(...)
&lt;/code&gt;

&lt;p&gt;There are about 110 unique values in 12 tables that I have to grab. On the pages are always two sets of these values: first the values (110 values in 12 tables) of a reference drill, &lt;b&gt;then&lt;/b&gt; the values that are interesting to me.&lt;/p&gt;

&lt;p&gt;So how do I parse these files quickly, reading all these values (stripped of dollar signs, commas, percentages) as quickly as possible?&lt;/p&gt;

&lt;p&gt;I guess I'd use File::Slurp to store a file in a scalar, then HTML::TableExtract (How do I get the second occurrence?)? Or should I use a regex (how do I get the second occurrence?)? Or a template (how?)?&lt;/p&gt;

&lt;p&gt;I'd be very grateful for your ideas and I really would appreciate code-snippets as I am really new to perl (replacing a bash script (yep) now...&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;</field>
</data>
</node>
