none
第一次使用c#来获取别人网站的html源码,转成string,想获取特定区域的html代码,然后筛选这个特定区域的某些标签内的文字,但是程序过程老是截取特定区域内的字符串不成功,如何解决?

    问题

  • <!--下面是筛选特定区域的html代码,然后筛选出 "class="text">筛选的文字<"里面的文字 -->

    </div><div id="tag-editor"></div><section class="work-tags"><dl><dt style="display:none;">标签</dt><dd><span class="tags-container"><ul class="tags"><li class="tag show-most-popular-illust-by-tag"><a href="/tags.php?tag=%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB" class="portal">c</a><span class="self-tag">*</span><a href="/search.php?s_mode=s_tag_full&amp;word=%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB" class="text">オリジナル</a><a href="http://dic.pixiv.net/a/%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB" target="_blank" class="icon-pixpedia _ui-tooltip" data-tooltip="“オリジナル”的相关文章"></a><a href="https://booth.pm/ja/search/%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB?utm_source=pixiv&utm_medium=work-tag&utm_content=work-item&utm_campaign=pixiv-worktag-loggedin" target="_blank" class="_ui-tooltip" data-tooltip="“オリジナル”的商品"><i class="_icon sprites-icon-booth-tag"></i></a></li><li class="tag show-most-popular-illust-by-tag"><a href="/tags.php?tag=%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC" class="portal">c</a><span class="self-tag">*</span><a href="/search.php?s_mode=s_tag_full&amp;word=%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC" class="text">ファンタジー</a><a href="http://dic.pixiv.net/a/%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC" target="_blank" class="icon-pixpedia _ui-tooltip" data-tooltip="“ファンタジー”的相关文章"></a><a href="https://booth.pm/ja/search/%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC?utm_source=pixiv&utm_medium=work-tag&utm_content=work-item&utm_campaign=pixiv-worktag-loggedin" target="_blank" class="_ui-tooltip" data-tooltip="“ファンタジー”的商品"><i class="_icon sprites-icon-booth-tag"></i></a></li><li class="tag show-most-popular-illust-by-tag"><a href="/tags.php?tag=%E9%A2%A8%E6%99%AF" class="portal">c</a><span class="self-tag">*</span><a href="/search.php?s_mode=s_tag_full&amp;word=%E9%A2%A8%E6%99%AF" class="text">風景</a><a href="http://dic.pixiv.net/a/%E9%A2%A8%E6%99%AF" target="_blank" class="icon-pixpedia _ui-tooltip" data-tooltip="“風景”的相关文章"></a><a href="https://booth.pm/ja/search/%E9%A2%A8%E6%99%AF?utm_source=pixiv&utm_medium=work-tag&utm_content=work-item&utm_campaign=pixiv-worktag-loggedin" target="_blank" class="_ui-tooltip" data-tooltip="“風景”的商品"><i class="_icon sprites-icon-booth-tag"></i></a></li><li class="tag show-most-popular-illust-by-tag"><a href="/tags.php?tag=%E5%8B%95%E7%89%A9" class="portal">c</a><span class="self-tag">*</span><a href="/search.php?s_mode=s_tag_full&amp;word=%E5%8B%95%E7%89%A9" class="text">動物</a><a href="http://dic.pixiv.net/a/%E5%8B%95%E7%89%A9" target="_blank" class="icon-pixpedia _ui-tooltip" data-tooltip="“動物”的相关文章"></a><a href="https://booth.pm/ja/search/%E5%8B%95%E7%89%A9?utm_source=pixiv&utm_medium=work-tag&utm_content=work-item&utm_campaign=pixiv-worktag-loggedin" target="_blank" class="_ui-tooltip" data-tooltip="“動物”的商品"><i class="_icon sprites-icon-booth-tag"></i></a></li></ul></span><script id="template-work-tags" type="text/x-handlebars-template">

     private void button_Click(object sender, RoutedEventArgs e)
            {
                string _url = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=61994429";
                string _htmlSource = GetHtmlSource(_url, Encoding.UTF8);
                string begin = "tag-editor";
                string end= "</i></a></li></ul></span><script id=\"template - work - tags\" type=\"text / x - handlebars - template\">";
                //MessageBox.Show(begin + "\n\n" + end);
                //int beginInt = _htmlSource.IndexOf(begin);
                //int endInt = _htmlSource.IndexOf(end);
                //string Ru = _htmlSource.Substring(beginInt + 1, endInt - beginInt - 1);
                if (_htmlSource.Contains(begin))
                {
                    MessageBox.Show("包含");
                }else
                {
                    MessageBox.Show("不包含");
                }
    
                //textBox.Text = Ru; 
    
    
            }

    不知道怎么回事,用substring 和IndexOf以我的方式筛选那个特定区域的代码,老是不成功,用IndexOf方法获取开头和结尾的html代码,返回的都是-1。然后我用Contain测试返回的是false,我确定截取的字符串都打对了,可是程序为什么找不到啊

    public static string GetHtmlSource(string url, Encoding charset)
            {
                string _html = string.Empty;
                try
                {
                    HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(url);
                    HttpWebResponse _response = (HttpWebResponse)_request.GetResponse();
                    using (Stream _stream = _response.GetResponseStream())
                    {
                        using (StreamReader _reader = new StreamReader(_stream, charset))
                        {
                            _html = _reader.ReadToEnd();
                        }
                    }
                }
                catch (WebException ex)
                {
                    using (StreamReader sr = new StreamReader(ex.Response.GetResponseStream()))
                    {
                        _html = sr.ReadToEnd();
                    }
                }
                catch (Exception ex)
                {
                    _html = ex.Message;
                }
                return _html;
            }

    获取网页html的源码,是复制他人的


    2017年3月19日 10:24

答案

  • 分析HTML,推荐用htmlagilitypack, http://htmlagilitypack.codeplex.com/

    有很多细节它都帮忙你考虑到了,下载源代码,里面有例子跑一下就知道如何使用这个类库。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年3月20日 0:18

全部回复

  • 分析HTML,推荐用htmlagilitypack, http://htmlagilitypack.codeplex.com/

    有很多细节它都帮忙你考虑到了,下载源代码,里面有例子跑一下就知道如何使用这个类库。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年3月20日 0:18
  • 推荐用正则表达式匹配,用字符串截取相对困难一些,查一下htmlagilitypack的使用方法。

    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年3月20日 0:19