从C#中生成的搜索结果中选择一个随机链接

时间:2013-10-23 22:48:14

标签: c# html wpf linq webclient

我正在创建一个wpf应用程序,我需要它从生成的搜索结果中随机选择一个链接。我不知道该怎么做。这只是我被分配的一项智力练习。请帮助我差不多完成了。这是迄今为止的代码......我是WPF的超级初学者。

namespace Search
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Btn_Click(object sender, RoutedEventArgs e)
        {
            using (var browser = new IE("http://www.google.com"))
            {
                browser.TextField(Find.ByName("q")).TypeText(_textBox.Text);
                browser.Button(Find.ByName("btnG")).Click();

                browser.WaitForComplete(5000);

                System.Windows.Forms.SendKeys.SendWait("{Enter}"); // presses search on the second screen

                browser.Button(Find.ById("gbqfb")/*.ByName("btnG")*/).Click(); // doesn't work



            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

以下是一些指示性代码......

private void DownloadRandomLink(string searchTerm)
{
    string fullUrl = "http://www.google.com/#q=" + searchTerm;
    WebClient wc = new WebClient();
    wc.DownloadFile(fullUrl, "file.htm");
    Random rand = new Random();
    HtmlDocument doc = new HtmlDocument();
    doc.Load("file.htm");
    var linksOnPage = from lnks in doc.DocumentNode.Descendants()
                      where lnks.Name == "a" &&
                            lnks.Attributes["href"] != null &&
                            lnks.InnerText.Trim().Length > 0
                      select new
                          {
                              Url = lnks.Attributes["href"].Value,
                              Text = lnks.InnerText
                          };
    if (linksOnPage.Count() > 0)
    {
        int randomChoice = rand.Next(0, linksOnPage.Count()-1);
        var link = linksOnPage.Skip(randomChoice).First();
        // do something with link...
    }
}

此代码采用搜索字词并构建完整的Google网址。然后,它将查询下载到本地文件中,并使用HTML Agility Pack打开该文件。

然后代码会创建一个页面上所有链接的列表,并使用拼凑在一起的随机选择。

正如其他人所提到的,您需要获得Google的许可才能针对其服务器运行代码。如果不这样做会导致您违规并可能产生尴尬的后果。

此外,此代码指示性;它并不意味着示范,甚至可构建。这是一个粗略的想法,了解所需的步骤。

您之前的设计尝试与Google索引页面上的控件进行交互,而且这种方法在第一时间太脆弱了。你不能为初学者测试它。

HTML Agility Pack在这里http://htmlagilitypack.codeplex.com/wikipage?title=Examples