如何填写网站表单并在C#中检索结果?

时间:2011-08-31 09:15:10

标签: c# forms web

我希望我的程序能够访问处理字符串输入的网站并返回有关它的一些信息。我想输入两个序列,提交它们并通过程序读取结果。该网站如下:

http://scansite.mit.edu/motifscan_seq.phtml

如果输入5031601作为蛋白质名称并输入DRNAYVWTLKGRTWKPTLVILRI作为序列,您将被重定向到结果站点。这是我希望能够通过我的程序阅读的网站。 我已经对此进行了很多研究,但我似乎无法获得任何有用的解决方案。

有人可以帮帮我吗?


编辑:

我尝试使用以下代码创建一个Web请求(改编自链接):

        WebRequest request = WebRequest.Create(
                                   "http://scansite.mit.edu/motifscan_seq");
        request.Method = "POST";
        string postData = @"motif_option=all&protein_id=5031601&
                           sequence=DRNAYVWTLKGRTWKPTLVILRI&
                           stringency=High&submit=Submit Request";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = byteArray.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        using (WebResponse response = request.GetResponse())
        using (Stream resSteam = response.GetResponseStream())
        using (StreamReader sr = new StreamReader(resSteam))
            File.WriteAllText("SearchResults.html", sr.ReadToEnd());
        System.Diagnostics.Process.Start("SearchResults.html");

当我打开SearchResults.html时,它包含输入蛋白质名称的原始表单站点。尚未输入序列(它是textarea,而不是文本框)。它尚未提交。有什么我遗失或做错了吗?


已解决问题,方法是将表单标记的操作属性(http://scansite.mit.edu/cgi-bin/motifscan_seq)中所述的请求发送给uri。< / p>

1 个答案:

答案 0 :(得分:0)

您的问题有点模糊,但您想要做的是屏幕抓取。它的基本含义是你下载页面的HTML并解析它以获取你想要的值。

相关网站向以下网址发送POST请求:

http://scansite.mit.edu/cgi-bin/motifscan_seq

使用以下参数:

motif_option: all
protein_id:   5031601
sequence:     DRNAYVWTLKGRTWKPTLVILRI
stringency:   High
submit:       Submit Request

您需要做的是向网址生成POST请求并传入相同的键/值对,而不是使用您的值。这里有一些关于如何使用C#执行此操作的文档(请查看页面中间的示例):

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

当您返回HTML时,您需要解析它并找到您需要的相关部分。不幸的是,HTML中没有ID或类,所有内容都是由表格构成的,因此这可能非常具有挑战性。这是另一个涵盖C#中屏幕抓取的问题:

Screen Scraping HTML with C#