我已经完成了屏幕抓取我们的一个遗留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 <img src="/images/icon_contact.gif" align="absmiddle"> :</font></b></td>
<td align="left" width="100%"> Joe Smith</td>
</tr>
<tr>
<td align="right" nowrap><b><font color="FF0000">Phone Number <img src="/images/icon_phone.gif" align="absmiddle"> :</font></b></td>
<td align="left" width="100%"> 555-555-5555</td>
</tr>
<tr>
<td align="right" nowrap><b><font color="FF0000">E-mail Address <img src="/images/icon_email.gif" align="absmiddle"> :</font></b></td>
<td align="left" width="100%"> <a HREF="mailto:joe@joe.com">joe@joe.com</a></td>
</tr>
more...
屏幕上有更多代码,我需要提取不同的表结构。
答案 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)
HtmlDocument可用于处理HTML文档。请参阅以下示例:
http://weblogs.asp.net/grantbarrington/archive/2009/10/15/screen-scraping-in-c.aspx
答案 4 :(得分:-1)
如果您将HTML存储在字符串中,则可以始终将正则表达式与捕获组一起使用来解析所需的信息。