如何使用WatIn刮擦页面上的超链接?

时间:2011-11-18 04:52:28

标签: c# filter watin bots scrape

我正在尝试使用WatIn收集超链接列表(它链接到的网址)。我尝试使用:

            foreach (Link l in myIE.Links)
            {

                Links.Add(l.ToString());                    
            }


            string LinksCSV = string.Join(",", Links.ToArray());
            richTextBox2.Text = LinksCSV;

我正在尝试列出我的richtextbox中的所有超链接,但上面返回了超链接名称,因此它反复显示“链接”。

此外,我将只需要列出包含“webpage.php?id =”的网址/链接,然后在此之后有一个唯一的编号。如何返回仅包含“webpage.php?id =”的过滤网址?

更新: 这是一个使用其他网站但不是我要求的网站的更新测试。以下代码有效。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WatiN.Core;


namespace ScrapeTest
{
class Program
{
    [STAThread]
        static void Main(string[] args)
    {
        IE ie = new IE();

        ie.GoTo("http://www.freesound.org/browse/tags/organ/");

        foreach (var currLink in ie.Links)
        {
            if (currLink.Url.Contains("sounds"))
            {
                Console.WriteLine("contains Edit in the link Url" + currLink.Url);
            }
        }

        Console.ReadLine();

    }

}

}

代码似乎是正确的,但是它与我的特定网址和超链接的交互似乎是个问题。我所追踪的网站和超链接包含敏感信息,因此他们的遗漏。

使用我的网站主页http://website.com脚本会运行,因此我将其发送到http://website.com/data.php?search=%22%22&cat=0的唯一网页存在问题 可能是因为网址中的.php? 如果有帮助,网址也会存储在页面上,如下所示。

td class="alt2">
<a align="center" href="data.php?id=111111">EDIT</a>
/td>

更新和解决方案:出于某种原因,当我尝试使用Url.Contains方法时,似乎会出现问题。我最终做的是将每个抓取的Url存储到一个列表中,并根据需要逐行测试我的列表以返回所需的Url。非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您的代码myIE.Links中的

LinkCollection,这意味着当您遍历Link个对象时,您需要指定所需的属性,在这种情况下它将是{{1} }

示例 - 访问google.com并将链接地址写入控制台。

Url

在WatiN 2.1,IE9,Win7上测试。

答案 1 :(得分:0)

您可以使用Contains()按以下方式执行此操作

foreach (Link l in myIE.Links)    
{  
            if(l.ToString().Contains("webpage.php?id="))
                Links.Add(l.ToString());  
}