2017-01-11 22 views
5

मेरे कोड के लिए, मैं Google नया खोज शीर्षक & URL प्राप्त करना चाहता हूं।Google समाचार सामग्री को पार्स करने के लिए कोई आउटपुट

यह अतीत में काम करता था। हालांकि, मुझे नहीं पता कि यह अब क्यों काम नहीं कर रहा है?

क्या Google ने अपनी सीएसएस संरचना बदल दी है या क्या?

धन्यवाद

public static void main(String[] args) throws UnsupportedEncodingException, IOException { 

     String google = "http://www.google.com/search?q="; 

     String search = "stackoverflow"; 

     String charset = "UTF-8"; 

     String news="&tbm=nws"; 


     String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; // Change this to your company's name and bot homepage! 

     Elements links = Jsoup.connect(google + URLEncoder.encode(search , charset) + news).userAgent(userAgent).get().select(".g>.r>.a"); 

     for (Element link : links) { 
      String title = link.text(); 
      String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>". 
      url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8"); 

      if (!url.startsWith("http")) { 
       continue; // Ads/news/etc. 
      } 
      System.out.println("Title: " + title); 
      System.out.println("URL: " + url); 
     } 
    } 

उत्तर

3

प्रश्न हो "मैं कोड फिर से काम कैसे मिलता है?" किसी के लिए यह जानना मुश्किल होगा कि पुराना पृष्ठ कैसा दिखता है जब तक कि वे एक प्रति सहेज नहीं लेते।

मैंने इस तरह अपना चयन तोड़ दिया और यह मेरे लिए काम किया।

String string = google + URLEncoder.encode(search , charset) + news; 
    Document document = Jsoup.connect(string).userAgent(userAgent).get(); 
    Elements links = document.select(".r>a"); 

वर्तमान पृष्ठ स्रोत की तरह

 <div class="g"> 
     <table> 
     <tbody> 
      <tr> 
      <td valign="top" style="width:516px"><h3 class="r"><a href="/url?q=https://www.bleepingcomputer.com/news/security/marlboro-ransomware-defeated-in-one-day/&amp;sa=U&amp;ved=0ahUKEwis77iq7cDRAhXI7IMKHUAoDs0QqQIIFCgAMAE&amp;usg=AFQjCNFFx-sJdU814auBfquRYSsct2c8WA">Marlboro Ransomware Defeated in One Day</a></h3> 

परिणाम दिखता है: शीर्षक: मार्लबोरो Ransomware एक दिवसीय में हराया यूआरएल: https://www.bleepingcomputer.com/news/security/marlboro-ransomware-defeated-in-one-day/

शीर्षक: स्टैक ओवरफ़्लो के लिए शुरू पर एक नया स्पिन डालता है डेवलपर्स यूआरएल: https://techcrunch.com/2016/10/11/stack-overflow-puts-a-new-spin-on-resumes-for-developers/

संपादन डी - समय सीमा ये यूआरएल पैरामीटर भयानक लगते हैं।
प्रत्यय जोड़ें & टीबीएस = सीडीआर% 3A1% 2Ccd_min% 3A5% 2F30% 2F2016% 2Ccd_max% 3A6% 2F30% 2F2016

लेकिन इस हिस्से "मिनट% 3A5% 2F30% 2F2016" अपने न्यूनतम तिथि है। 5 30 2016. न्यूनतम% 3 ए + (वर्ष का महीना) +% 2 एफ + (महीने का दिन) +% 2 एफ + वर्ष और "अधिकतम% 3 ए 6% 2 एफ 30% 2 एफ2016" में आपकी अधिकतम तिथि है। 6 30 2016. अधिकतम% 3 ए + (वर्ष का महीना) +% 2 एफ + (महीने का दिन) +% 2 एफ + वर्ष

यहां पर पूरा यूआरएल 05/30/2016 और 06/30 के बीच मिंडी कलिंग के लिए खोज रहा है/2016 https://www.google.com/search?tbm=nws&q=mindy%20kaling&tbs=cdr%3A1%2Ccd_min%3A5%2F30%2F2016%2Ccd_max%3A6%2F30%2F2016

+0

काम करता है! एक और सवाल। समय की एक विशिष्ट सीमा में समाचार प्राप्त करने के लिए, उदाहरण के लिए। एक साल, तीन साल या पांच साल? धन्यवाद – evabb

+0

समय सीमा पैरामीटर – ProgrammersBlock

2

नीचे मेरे लिए काम किया। कृपया ध्यान दें पैटर्न ".g .r>a" - वर्ग g साथ तत्वों को खोजने >>> वर्ग r साथ कि अंदर सभी तत्वों को जो तुरंत documentation से टैग a

Elements links = Jsoup.connect(google + URLEncoder.encode(search , charset) + news) 
    .userAgent(userAgent).get().select(".g .r>a"); 

साथ उतरा है:

.class: वर्ग द्वारा तत्वों को खोजने नाम, उदाहरण के लिए । मास्टहेड

ancestor child: पूर्वजों से निकलने वाले बाल तत्व, उदा। । किसी व्यक्ति को कक्षा "शरीर"

parent > child: बाल तत्व जो सीधे माता-पिता से उतरते हैं, के साथ ब्लॉक के नीचे पी तत्वों को पाता है। div।सामग्री> पी पी तत्वों पाता है; और शरीर> * शरीर टैग के प्रत्यक्ष बच्चों को

हालांकि समाधान काम करता है, मुझे लगता है कि इस पर भरोसा करने की सिफारिश नहीं की जा सकती है जब तक यह अध्ययन उद्देश्य या अस्थायी उपयोग के लिए न हो। उत्पाद के एक हिस्से के रूप में इसे शिपिंग करने से विफलता हो सकती है जब भी Google अपने पृष्ठ प्रतिपादन को बदलता है।

+0

की व्याख्या करने के लिए अद्यतन उत्तर, क्या आप जानते हैं कि दिनांक सीमा को 2016/1/1 से 2016/1/12 तक कैसे सेट करें और Google खोज परिणामों के प्रत्येक पृष्ठ पर जाएं – Vito

+0

Google पर एक खोज चलाना मुझे यूआरएल पैटर्न **? q = stackoverflow और tbs = cdr: 1, cd_min: 1/1/2016, cd_max: 12/1/2016 और tbm = nws ** आपको इसे प्राप्त करने में मदद करेगा। क्या आप उत्तर स्वीकार कर सकते हैं क्योंकि इससे आपकी समस्या हल हो गई है? –

संबंधित मुद्दे