Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest跳过网页中的特定下拉菜单_C#_Asp.net_Httpwebrequest_Web Scraping - Fatal编程技术网

C# HttpWebRequest跳过网页中的特定下拉菜单

C# HttpWebRequest跳过网页中的特定下拉菜单,c#,asp.net,httpwebrequest,web-scraping,C#,Asp.net,Httpwebrequest,Web Scraping,我目前正试图刮一个网站,它给了我一点麻烦。webscraper正在跳过网页中的特定下拉菜单 网页是用asp.net生成的。我可以加载带有url的第一个页面,然后需要使用带有url的cookie来加载其他页面。然后将这些页面保存为.html文件。我加载的第二个url缺少数据 一旦我有了.html文件,我就用HTMLAgilityPack解析它们 这是删除站点的代码 static void saveWebPage(int ID) { //The first page

我目前正试图刮一个网站,它给了我一点麻烦。webscraper正在跳过网页中的特定下拉菜单

网页是用asp.net生成的。我可以加载带有url的第一个页面,然后需要使用带有url的cookie来加载其他页面。然后将这些页面保存为.html文件。我加载的第二个url缺少数据

一旦我有了.html文件,我就用HTMLAgilityPack解析它们

这是删除站点的代码

    static void saveWebPage(int ID) 
    {
        //The first page can be loaded via the url.
        //The rest  need an url and a cookie to be loaded.

        //1st page
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webPage + ID.ToString());
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";      
        CookieContainer aCookie = new CookieContainer();
        request.CookieContainer = aCookie;

        WebResponse pageResponse = request.GetResponse();

        Stream responseStream = pageResponse.GetResponseStream();
        TextWriter textDoc = new StreamWriter(ID.ToString() + "Page1.html");
        string html = string.Empty;

        using (StreamReader streamRead = new StreamReader(responseStream))
        {
            html = streamRead.ReadToEnd();
        }

        textDoc.Write(html);
        textDoc.Close();


        //2nd page
        HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(webPage2 + ID.ToString());
        request2.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
        request2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";  
        request2.CookieContainer = request.CookieContainer;

        pageResponse = request2.GetResponse();

        responseStream = pageResponse.GetResponseStream();
        textDoc = new StreamWriter(ID.ToString() + "Page2.html");
        html = string.Empty;

        using (StreamReader streamRead = new StreamReader(responseStream))
        {
            html = streamRead.ReadToEnd();
        }


        textDoc.Write(html);
        textDoc.Close();

        //........ More code in the same style.

        }
该网页有几个下拉菜单。除了一个特定的数据,我可以获取所有数据。我可以抓取的菜单的HTML代码可能如下所示:

    <td ><select name="menuName" id="menuID" disabled="disabled" style="menuStyle">
    <option selected="selected" value="-1">Title</option>
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
            //....... More options.
    <td ><select name="menuName" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;menuName\&#39;,\&#39;\&#39;)&#39;, 0)" id="menuID" disabled="disabled" style="width:menuWidth; position:static">
    <option selected="selected" value="-1">Title</option>

标题
A.
B
C
D
//....... 更多选择。
我可以解析这些数据。网站上的问题菜单如下所示:

    <td ><select name="menuName" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;menuName\&#39;,\&#39;\&#39;)&#39;, 0)" id=*menuID disabled="disabled" style="width:menuWidth; position:static">
    <option value="-1">Title</option>
    <option value="1">A</option>
    <option selected="selected" value="2">B</option>
    <option value="3">C</option>
            //..... More options.

标题
A.
B
C
//..... 更多选择。
我的scraper创建的.html文件如下所示:

    <td ><select name="menuName" id="menuID" disabled="disabled" style="menuStyle">
    <option selected="selected" value="-1">Title</option>
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
            //....... More options.
    <td ><select name="menuName" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;menuName\&#39;,\&#39;\&#39;)&#39;, 0)" id="menuID" disabled="disabled" style="width:menuWidth; position:static">
    <option selected="selected" value="-1">Title</option>

标题
我已经尝试过使用和不使用用户代理选项的scraper,但是没有任何区别。我还检查了网站,我可以抓取其他运行javascript:setTimeout on change的菜单。那么,我的scraper跳过菜单数据并将菜单标题作为所选值是否有任何原因

编辑:

用Fiddler重新加载页面将显示六个结果

请求头都如下所示:

    <td ><select name="menuName" id="menuID" disabled="disabled" style="menuStyle">
    <option selected="selected" value="-1">Title</option>
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
            //....... More options.
    <td ><select name="menuName" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;menuName\&#39;,\&#39;\&#39;)&#39;, 0)" id="menuID" disabled="disabled" style="width:menuWidth; position:static">
    <option selected="selected" value="-1">Title</option>
连接site.site.site:443http/1.1

客户端用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/31.0.1650.63 Safari/537.36

运输:

连接:保持活力

主持人:site.site.site

编辑2:来自Fiddler中响应的原始视图的信息

<td ><select name="menuName" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;menuName\&#39;,\&#39;\&#39;)&#39;, 0)" id="menuID" disabled="disabled" style="width:menuWidth; position:static">
<option value="-1">Title</option>
<option value="1">A</option>
<option selected="selected" value="2">B</option>
<option value="3">C</option>
        //..... More options.

标题
A.
B
C
//..... 更多选择。
标题看起来与我在scraper中发送的内容略有不同,网站是https,而不是http

获取**asp.x?第2页HTTP/1.1

主持人:site.site.site

连接:保持活力

缓存控制:最大年龄=0

接受:text/html、application/xhtml+xml、application/xml;q=0.9,图像/webp,/;q=0.8

用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如Gecko) Chrome/32.0.1700.76 Safari/537.36

参考资料:*asp.x?第1页

接受编码:gzip、deflate、sdch

接受语言:en-US,en;q=0.8


Cookie:ASP.NET_SessionId=***SessionId

请使用Fiddler(或任何其他Http调试器)查看站点在每种情况下实际报告的内容。现在还不清楚“问题菜单在网站上的位置是这样的:”信息来自-可能来自完全呈现的页面。我将在Fiddler中查看它。问题菜单来自于在chrome中查看网站的源代码。我在标题选项卡上从Fiddler向主体添加了数据。我到底在找什么?我对Fiddler没有太多的经验。在响应的原始视图中查看-您正在查看服务器返回的HTML是什么样子(以及
HttpWebRequest
能够获得什么),而不是浏览器认为它是什么样子。好的,谢谢。我在HTML代码的原始视图中查看菜单。它看起来与chrome中的html代码一模一样。不过,请求头看起来略有不同。