【问题标题】:How do I fill in a website form and retrieve the result in C#?如何填写网站表单并在 C# 中检索结果?
【发布时间】:2011-08-31 19:47:58
【问题描述】:

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

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

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

谁能帮帮我?


编辑:

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

        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 时,它包含输入了蛋白质名称的原始表单站点。尚未输入序列(它是文本区域,而不是文本框)。而且还没有提交。我有什么遗漏或做错了吗?


已解决问题,方法是将请求发送到表单标签的 action 属性中指定的 uri (http://scansite.mit.edu/cgi-bin/motifscan_seq)。

【问题讨论】:

    标签: c# forms web


    【解决方案1】:

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

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

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

    带有以下参数:

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

    您需要做的是向 URL 生成一个 POST 请求并传入相同的键/值对,但您的值除外。以下是有关如何使用 C# 执行此操作的一些文档(请查看页面中间的示例):

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

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

    Screen Scraping HTML with C#

    【讨论】:

    • 丹尼尔,非常感谢您的回复。我不得不编辑我的问题,因为我还不能“回答我自己的问题”:)
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多