كيف يمكنك تحليل صفحة ويب و استخراج جميع href الروابط ؟

StackOverflow https://stackoverflow.com/questions/99279

  •  01-07-2019
  •  | 
  •  

سؤال

أريد أن تحليل صفحة ويب في رائع و استخراج جميع href الروابط و النص المرتبطة بها مع ذلك.

إذا كانت الصفحة تحتوي على هذه الروابط:

<a href="http://www.google.com">Google</a><br />
<a href="http://www.apple.com">Apple</a>

وسيكون الناتج:

Google, http://www.google.com<br />
Apple, http://www.apple.com

أنا أبحث عن رائع الإجابة.ويعرف أيضا.طريقة سهلة!

هل كانت مفيدة؟

المحلول

على افتراض بشكل جيد XHTML, إلتهم xml, جمع كل العلامات العثور على 'a' العلامات ، وطباعة href والنص.

input = """<html><body>
<a href = "http://www.hjsoft.com/">John</a>
<a href = "http://www.google.com/">Google</a>
<a href = "http://www.stackoverflow.com/">StackOverflow</a>
</body></html>"""

doc = new XmlSlurper().parseText(input)
doc.depthFirst().collect { it }.findAll { it.name() == "a" }.each {
    println "${it.text()}, ${it.@href.text()}"
}

نصائح أخرى

جوجل للبحث سريع تحولت لطيفة تبحث إمكانية ، TagSoup.

أنا لا أعرف جافا ولكن أعتقد أن xpath هي أفضل بكثير من الكلاسيكية التعبيرات العادية من أجل الحصول على واحد (أو أكثر) من عناصر html.

بل هو أيضا أسهل في الكتابة و القراءة.

<html>
   <body>
      <a href="1.html">1</a>
      <a href="2.html">2</a>
      <a href="3.html">3</a>
   </body>
</html>

مع html أعلاه ، هذا التعبير "/html/الجسم/أ" سيتم سرد كافة href العناصر.

هنا خطوة بخطوة البرنامج التعليمي http://www.zvon.org/xxl/XPathTutorial/General/examples.html

استخدام XMLSlurper تحليل HTML كما مستند XML ومن ثم استخدام تجد الطريقة المناسبة إغلاق لتحديد العلامات ومن ثم استخدام طريقة قائمة على GPathResult للحصول على قائمة من الكلمات.ثم يجب أن تكون قادرة على استخراج النص الأطفال من GPathResult.

حاول التعبير العادية.شيئا من هذا القبيل يجب أن تعمل:

(html =~ /<a.*href='(.*?)'.*>(.*?)<\/a>/).each { url, text -> 
    // do something with url and text
}

نلقي نظرة على رائع البرنامج التعليمي 4 - التعبيرات العادية أساسيات و مرساة الوسم التعبير العادي كسر.

تحليل باستخدام XMlSlurper يعمل فقط إذا HTMl بشكل جيد.

إذا كانت صفحة HTMl الخاصة بك قد غير بشكل جيد فئة ، ثم استخدام التعابير المنطقية لتحليل الصفحة.

مثلا: <a href="www.google.com">

هنا, 'a' ليست مغلقة وبالتالي لم تتشكل بشكل جيد.

 new URL(url).eachLine{
   (it =~ /.*<A HREF="(.*?)">/).each{
       // process hrefs
   }
}

Html محلل + التعبيرات العادية أي لغة أن تفعل ذلك ، على الرغم من أنني أقول بيرل هو أسرع حل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top