2011-08-31 47 views
2

我希望我的程序能够访问处理字符串输入并返回一些相关信息的网站。我想输入两个序列,提交它们并通过程序读取结果。该网站是:如何填写网站表单并在C#中检索结果?

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,它包含原始形成输入蛋白名称的网站。该序列尚未输入(它是一个文本区,而不是文本框)。并没有提交。有什么我失踪或做错了吗?


通过将请求发送到的是,在形式标签(http://scansite.mit.edu/cgi-bin/motifscan_seq)的action属性规定的URI解决问题。

回答

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#

+1

丹尼尔,非常感谢你的回复。我不得不编辑我的问题,因为我不允许“回答我自己的问题”:) – Anna

相关问题