结构化数据抓取的要求:
1、支持对表格数据的抓取,并且定义抓取规则简单
2、支持对分页数据抓取
3、支持对数据有效性的验证,并能定义默认值
4、支持对数据的排重
5、支持对代码字典表的映射
基于上述要求开发了一款基于XPath和正则表达式的结构化数据抓取软件
优点:
1. 基于XPath搜索定位。使用XPath强大的语法定义,可以使用方便简单的语句即可在网页中定位到所需要的元素;
2. 支持基于正则表达式的强大识别功能,可以使用简单的语句即可识别你所关心的内容,同时还对扩充了对匹配输出的定义。
3. 支持基于正则表达式的替换功能,可以在一个语句中定义多个替换;
4. 容错功能,对于没有提取的数据项,可以使用默认值代替;
5. 支持完整的结构化数据采集,所有采集定义都是基于数据项,有完整的数据记录提取功能,并提供数据映射和排重功能;
6. 支持多种数据库,SqlServer、Access等;
7. 自动创建抓取任务,数据项提取的Url可以定义是否继续抓取,同时你可以指定抓取方案;
8. 支持多页抓取,对于需要回传到服务器才能访问的网页,支持表单提交;
9. 一个任务在一个线程,最大限度使用网络资源;
提供强大的定时控制功能,在网络空闲时段采集数据,在繁忙时段自动暂停;例如:可以定义一个任务工作1分钟暂停1分钟;一个任务工作另一个任务暂停,交替工作;在24、1、2、3、4、5、6、7、8点工作,其它时间暂停;
联系QQ:631374337
下面是配置文件片断:
<Schecma Name="采集公司" Code="51Job_Company">
<DataRecords>
<DataRecord Name="" StorageName="tblCompany">
<!--公司名称-->
<DataItem>
<Name>公司名称</Name>
<FieldName>nvcName</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/table[1]/tr[1]/td[1]]]></XPath>
<Filter><![CDATA[([/w/d()()]*) $1]]></Filter>
<DuplicateCheck>True</DuplicateCheck>
</DataItem>
<!--公司行业-->
<DataItem>
<Name>公司行业</Name>
<FieldName>iIndustryCategory</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/table[1]/tr[2]/td[1]]]></XPath>
<Filter><![CDATA[公司行业:</strong> ([/w/d/,,()()]*)[<&]?$1]]></Filter>
<DuplicateCheck>True</DuplicateCheck>
<Mapping>True</Mapping>
<MappingCode>IN</MappingCode>
</DataItem>
<!--公司性质-->
<DataItem>
<Name>公司性质</Name>
<FieldName>iCompanyProperty</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/table[1]/tr[2]/td[1]]]></XPath>
<Filter><![CDATA[公司性质:</strong> ([/w/d/()]*)<br>$1]]></Filter>
<DuplicateCheck>True</DuplicateCheck>
<IgoneAllError>True</IgoneAllError>
<Mapping>True</Mapping>
<MappingCode>CT</MappingCode>
<DefaultValue>80</DefaultValue>
</DataItem>
<!--公司简介-->
<DataItem>
<Name>公司简介</Name>
<FieldName>nvcIntroduction</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[@class="jobs_com"]/div[@class="grayline"]/div[@class="jobs_txt"]/p[1]]]></XPath>
<Replacement><![CDATA[<[/]?[^>]*>->;;]]></Replacement>
</DataItem>
<!--公司规模-->
<DataItem>
<Name>公司规模</Name>
<FieldName>nvcScale</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/table[1]/tr[2]/td[1]]]></XPath>
<Filter><![CDATA[公司规模:</strong> ([/w/d/]*)$1]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--公司网址-->
<DataItem>
<Name>公司网址</Name>
<FieldName>nvcUrl</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[公司网站:<a href="([/w/d;:,//.]*)"$1]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--公司地址-->
<DataItem>
<Name>公司地址</Name>
<FieldName>nvcAddress</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[地 址:([/w/d,、/-/s]*)[&<]+$1]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--邮编-->
<DataItem>
<Name>邮编</Name>
<FieldName>nvcPostcode</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[邮政编码:([/w/d,、/-/s]*)[&<]+$1]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--传真-->
<DataItem>
<Name>传真</Name>
<FieldName>nvcFax</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[传( )*真:([/w/d,、/-()/s]*)[&<]+$2]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--联系人-->
<DataItem>
<Name>联系人</Name>
<FieldName>nvcContact</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[联( )*系( )*人:([/w/d,、/-/s]*)[&<]+$3]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--电话-->
<DataItem>
<Name>电话</Name>
<FieldName>nvcTel</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[电( )*话:([/w/d,、/-/s()]*)[&<]+$2]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--邮箱-->
<DataItem>
<Name>邮箱</Name>
<FieldName>nvcEmail</FieldName>
<XPath><![CDATA[//div[@class="s_txt_jobs"]/div[1]/div[2]/div[1]]]></XPath>
<Filter><![CDATA[>(/w+/d*@[/w/d.]*)<$1]]></Filter>
<IgoneFilteError>False</IgoneFilteError>
<DefaultValue></DefaultValue>
</DataItem>
<!--来源-->
<DataItem>
<Name>来源</Name>
<FieldName>iSource</FieldName>
<IgoneAllError>true</IgoneAllError>
<DefaultValue>10</DefaultValue>
</DataItem>
</DataRecord>
</DataRecords>
</Schecma>