2009-03-01 3 views
3

Я думаю, что это возможно с jQuery, но любой код сервера ASP.NET хорош для моей ситуации.Как читать заголовок внешней страницы?

С помощью jQuery я могу загрузить страницу, например, в div, и отфильтровать div для тега <title>, но я думаю, что для тяжелых страниц нехорошо сначала прочитать весь контент, а затем прочитать тег заголовка. или, может быть, у него очень простое решение? в любом случае я не мог найти ничего об этом из Интернета. спасибо

+0

Внешние к текущей странице или внешние по отношению к сайту? – AnthonyWJones

+0

внешний для сайта, из другого домена – mohamadreza

ответ

2

окей благодаря cjjer и Boo, я только что прочитал больше о регулярных выражениях и, наконец, ниже код работает для меня.

Dim qq As New System.Net.WebClient 
    Dim theuri As New Uri(TextBox1.Text) 
    Dim res As String = qq.DownloadString(theuri) 
    Dim re As Regex = New Regex("<title\b[^>]*>(.*?)</title>", RegexOptions.Singleline) 
    Dim ma As Match = re.Match(res) 


    If Not ma Is Nothing And ma.Success Then 
     Response.Write(ma.Groups(1).Value.ToString()) 
    Else 
     Response.Write("error") 
    End If 

, но в любом случае, проблема остается, этот код загрузки всей страницы и поиск через него, что один тяжелых сайтов, потребовалось более 2 или 3 secconds для завершения, но, кажется, это единственный способ, как далеко как я знаю: | Есть ли предложения по улучшению этого кода?

0

Это будет угроза безопасности для вас, чтобы загрузить любую другую веб-страницу в вашу, только для чтения заголовка ... Вы должны сделать это с помощью скриптов на стороне сервера (asp.net, php, ...) и просто выведите заголовок на свою веб-страницу. Что-то вроде кэширования, потому что он бесшовна для получения заголовков по каждому запросу.

+0

да, это то, о чем я думал, но я мог найти решение, чтобы прочитать название веб-сайта, которое дается пользователем в качестве ссылки .. – mohamadreza

0

Существует нет простого чистого способа получить заголовок внешней страницы. Вы можете сделать это на стороне сервера, используя WebClient и разобрать ответ.

Однако, возможно, стоит пересмотреть требование, действительно ли необходимо, какой дополнительный трафик и латентность он будет генерировать. Учтите также, что вы можете генерировать нагрузку на внешний сайт, который не знает, что вы хотите, это заголовок, создание страницы может быть довольно дорогостоящим.

+0

yep, right, what i am goin, котор нужно сделать, после того как пользователи представили их вебсайт или fav ссылки к приложению, приложение может прочитать название и сохранить связь с заглавием к базе данных, вместо того чтобы принуждать потребителя написать поле «названия» для их вебсайта .. – mohamadreza

0
string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString(); 

try.i не уверен.

+0

synthax error for me on [0] – mohamadreza

1

Титулы обычно отображаются в пределах первых нескольких сотен байт, поэтому вы можете попробовать запрос диапазона для первого 1KiB или около того, попробуйте разбор этого (с помощью анализатора с исправлением ошибок, поскольку некоторые закрывающие теги будут отсутствовать), и если это не возвращается к загрузке всей страницы.

0

Я не уверен, поддерживают ли все серверы.
Смотрите, если это помогает

 

char[] data = new char[299]; 
System.Net.HttpWebRequest wr =(HttpWebRequest)WebRequest.Create("http://www.yahoo.com"); 
wr.AddRange("bytes", 0, 299); 
HttpWebResponse wre = (HttpWebResponse)wr.GetResponse(); 
StreamReader sr = new StreamReader(wre.GetResponseStream()); 
sr.Read(data, 0, 299); 
Console.WriteLine((data)); 
sr.Close(); 
 

EDIT: Попробуйте проверить с каким-то инструментом для мониторинга сети, чтобы выяснить, что текст, сервера разослать. Я использовал скрипач, чтобы увидеть вывод & написал его на консоль.

EDIT2: Я предполагаю, что название должно быть в начале страницы.

+0

спасибо, он сработал, но он не является надежным, он не всегда возвращает содержимое с URL-адреса, который вы ввели .. перенаправления, страницы включает в себя и действия ajax, сделать его сломанным .. – mohamadreza

2

cjjer почти получил это право.

Во-первых, изменить регулярное выражение: <title>(?<Content>.*?)?</title>

Во-вторых, необходимо создать объект соответствия первым (только в случае, если ваш URI не имеет названия).

Match tMatch = new RegEx(@"<title>(?<Content>.*?)?</title>").Match(new System.Net.WebClient().DownloadString(url)); 

if ((null != tMatch) && (tMatch.IsSuccess)) { 
    // yay. 
    title = tMatch.Groups("Content").value; 
} 
+0

i dunno много о regex, он вызывает эту ошибку: синтаксический разбор "(?. *?)?" - Нераспознанная структура группировки – mohamadreza

+0

Stoopid StackOverflow. . *?)? – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">HTML Декодирует это. Duno, почему они этого не делают для вас. – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048337"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Последний вопрос </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://ru.uwenku.com/question/p-nqzbtlue-dx.html" target="_blank" title="C# Перезаписать текстовый файл - ничего не записывается в файл"> C# Перезаписать текстовый файл - ничего не записывается в файл </a> </li> <li class="side_article_list_item"> 2. <a href="http://ru.uwenku.com/question/p-mbebthlm-dd.html" target="_blank" title="AndroidStudio Gradle ошибка: «Ошибка: пустое значение в записи: resOutputDir = нуль»"> AndroidStudio Gradle ошибка: «Ошибка: пустое значение в записи: resOutputDir = нуль» </a> </li> <li class="side_article_list_item"> 3. <a href="http://ru.uwenku.com/question/p-smfryiwy-gh.html" target="_blank" title="Крючки на функции в node.js"> Крючки на функции в node.js </a> </li> <li class="side_article_list_item"> 4. <a href="http://ru.uwenku.com/question/p-drgsxwjn-er.html" target="_blank" title="IONIC 2 native Network.onDisconnect() код запуска дважды"> IONIC 2 native Network.onDisconnect() код запуска дважды </a> </li> <li class="side_article_list_item"> 5. <a href="http://ru.uwenku.com/question/p-urewrqde-z.html" target="_blank" title="Asp.Net MVC JsonResult метания «Корневой элемент отсутствует» ошибка в IIS"> Asp.Net MVC JsonResult метания «Корневой элемент отсутствует» ошибка в IIS </a> </li> <li class="side_article_list_item"> 6. <a href="http://ru.uwenku.com/question/p-gpvdqhkl-g.html" target="_blank" title="Ионный 2 - Идентификатор передачи от json к ребенку (подробности) страница"> Ионный 2 - Идентификатор передачи от json к ребенку (подробности) страница </a> </li> <li class="side_article_list_item"> 7. <a href="http://ru.uwenku.com/question/p-fsbnryhf-cb.html" target="_blank" title="Найти общие элементы из нескольких категорий в рамках dataframe?"> Найти общие элементы из нескольких категорий в рамках dataframe? </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Смежные вопросы</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">Нет связанных вопросов^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://ru.uwenku.com/contact">Свяжитесь с нами</a></li> <li>© 2020 RU.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>