用C#屏幕抓取HTML

时间:2011-01-03 19:46:05

标签: c# screen-scraping

我已经完成了屏幕抓取我们的一个遗留Web应用程序以从代码中提取某些数据的任务。数据被格式化并且“应该”每次都显示完全相同。我只是不确定如何去做这件事。这是一个包含页眉和页脚导航的完整html文件,但在这一切的中间是我需要的数据。

我需要提取公司名称值,联系人姓名,电话,电子邮件地址等

以下是代码的示例:

...html above here

<br /><br />
<table cellpadding="0" cellspacing="12" border="0">
    <tr>
        <td valign="top" align="center">
            <!-- Company Info -->

            <table cellpadding="0" cellspacing="0" border="0">
                <tr>
                    <td class="black">
                        <table cellspacing="1" cellpadding="0" border="0" width="370">
                            <tr>
                                <th>ABC INDUSTRIES</th>
                            </tr>
                            <tr>
                                <td class="search">

                                    <table cellpadding="5" cellspacing="0" border="0" width="100%">
                                        <tr>
                                            <td>
                                                <table cellpadding="1" cellspacing="0" border="0" width="100%">
                                                   <tr>
                                                        <td align="center" colspan="2"><hr></td>
                                                    </tr>
                                                    <tr>
                                                        <td align="right" nowrap><b><font color="FF0000">Contact Person&nbsp;<img src="/images/icon_contact.gif" align="absmiddle">&nbsp;:</font></b></td>
                                                        <td align="left" width="100%">&nbsp;Joe Smith</td>
                                                    </tr>
                                                    <tr>
                                                        <td align="right" nowrap><b><font color="FF0000">Phone Number&nbsp;<img src="/images/icon_phone.gif" align="absmiddle">&nbsp;:</font></b></td>
                                                        <td align="left" width="100%">&nbsp;555-555-5555</td>
                                                    </tr>
                                                    <tr>
                                                        <td align="right" nowrap><b><font color="FF0000">E-mail Address&nbsp;<img src="/images/icon_email.gif" align="absmiddle">&nbsp;:</font></b></td>
                                                        <td align="left" width="100%">&nbsp;<a HREF="mailto:joe@joe.com">joe@joe.com</a></td>
                                                    </tr>
                                                    more...

屏幕上有更多代码,我需要提取不同的表结构。

5 个答案:

答案 0 :(得分:23)

您是否只是在寻找有关如何实现这一目标的建议? HTML Agility Pack可能是您解析DOM解析的最佳选择。可能会有一些修补和试错,以维持屏幕刮擦(通常有这种事情),但该库非常适合解析HTML。

从技术上讲,任何XML解析(甚至是原生的LINQ to XML)应该可以做到这一点,但是网站有一个不良格式的恶习,所以你可能会遇到一些小麻烦。

答案 1 :(得分:1)

在最近的项目中,我成功地使用WebRequest及相关类从URL下载HTML,然后使用SgmlReader解析器实际访问结构化内容。

答案 2 :(得分:1)

如果每次调用页面注释和表格布局代码相同,我会将页面拉成一个字符串并使用一系列.IndexOf和.Substring函数来解析数据。使用IndexOf函数查找每个字段的起始和结束索引。在Substring函数中使用这些字段索引来获取数据。

它并不漂亮,但完成了工作。

答案 3 :(得分:-1)

答案 4 :(得分:-1)

如果您将HTML存储在字符串中,则可以始终将正则表达式与捕获组一起使用来解析所需的信息。