昨晚,当我问到有关屏幕抓取的问题时,我获得了一个出色的文章链接,并使我明白了这一点。我有几个问题。我将在下面发布我的代码以及html源。我正在尝试获取数据表之间的数据,然后将数据发送到sql表。我发现抓取成功描述Widget3.5 ect …由乔最后修改,但是因为1st 2 / tr还包含img src = / ......“ alt =” 00721408“,所以不会抓取数字。关于如何更改代码以使表中的所有数据都被捕获,我被困了;第二,下一步需要做什么,以便准备将数据发送到sql表。我的代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using HtmlAgilityPack; using System.Windows.Forms; namespace ConsoleApplication1 { } class Program { static void Main(string[] args) { // Load the html document var webGet = new HtmlWeb(); var doc = webGet.Load("http://localhost"); // Get all tables in the document HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table"); // Iterate all rows in the first table HtmlNodeCollection rows = tables[0].SelectNodes(".//tr"); for (int i = 0; i < rows.Count; ++i) { // Iterate all columns in this row HtmlNodeCollection cols = rows[i].SelectNodes(".//td"); for (int j = 0; j < cols.Count; ++j) { // Get the value of the column and print it string value = cols[j].InnerText; Console.WriteLine(value); } } } } <table class="data"> <tr><td>Part-Num</td><td width="50"></td><td><img src="/partcode/number/072140" alt="072140"/></td></tr> <tr><td>Manu-Number</td><td width="50"></td><td><img src="/partcode/manu/00721408" alt="00721408" /></td></tr> <tr><td>Description</td><td></td><td>Widget 3.5</td></tr> <tr><td>Manu-Country</td><td></td><td>United States</td></tr> <tr><td>Last Modified</td><td></td><td>26 Jan 2011, 8:08 PM</td></tr> <tr><td>Last Modified By</td><td></td><td> Manu </td></tr> </table> <p> </body></html>
尽管这种情况很脆弱,但在您的情况下还是可以的-基本上只包括所有图像alt属性的文本内容:
alt
// Iterate all rows in the first table HtmlNodeCollection rows = tables[0].SelectNodes(".//tr"); for (int i = 0; i < rows.Count; ++i) { // Iterate all columns in this row HtmlNodeCollection cols = rows[i].SelectNodes(".//td"); for (int j = 0; j < cols.Count; ++j) { var images = cols[j].SelectNodes("img"); if(images!=null) foreach (var image in images) { if(image.Attributes["alt"]!=null) Console.WriteLine(image.Attributes["alt"].Value); } // Get the value of the column and print it string value = cols[j].InnerText; Console.WriteLine(value); } }