2017-01-11 9 views
5

ここで私のコードはgoogleの新しい検索タイトル&を取得したいと思います。Googleニュースコンテンツを解析するための出力がありません

これまでは働いていましたが、なぜ今は動作していないのですか?

GoogleはCSS構造を変更しましたか?

おかげ

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> 

結果のようになります。 タイトル:マルボロランサムウェアは、一日で敗北 URL:https://www.bleepingcomputer.com/news/security/marlboro-ransomware-defeated-in-one-day/

タイトル:スタックオーバーフローがために履歴書に新しいスピンを置きます開発者 URL:https://techcrunch.com/2016/10/11/stack-overflow-puts-a-new-spin-on-resumes-for-developers/

Edite d - 時間範囲 これらのURLパラメータはひどく見えます。
サフィックスを追加& TBS = CDR%3A1%2Ccd_min%3A5%2F30%2F2016%2Ccd_max%3A6%2F30%2F2016

しかし、この部分 "分%3A5%2F30%の2F2016は" あなたの最小の日付が含まれています。 5 30 2016. 分%3A +(月)+%2F +(日)+%2F +年 「最大%3A6%2F30%2F2016」はあなたの最大日付です。 630 2016. 最大%3A +(月)+%2F +(日)+%2F +年

ここでは、05/30/2016と06/30の間にMindy Kalingを検索する完全なURLを示します/ 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

Works!もう1つの質問です。たとえば、特定の時間帯にニュースを取得するにはどうすればいいですか? 1年、3年または5年?ありがとう – evabb

+0

答えが更新されました – ProgrammersBlock

2

以下は私のために働いた。パターン".g .r>a"に注意してください - すぐにdocumentationからタグa

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

で下降するクラスrとその内部のすべての要素>>>クラスgを持つ要素を見つける:

.class:クラス別の要素を見つけます名前、例。マストヘッド

ancestor child:祖先に由来する子要素。 .body pは、クラス "body"を持つブロックの下にp要素を見つけます。

parent > child:親から直接降下する子要素。 div。content> pはp要素を見つける。 body> *はbodyタグの直系子を見つけます

解決策は機能しましたが、これは学習目的や一時的な使用目的以外の場合は推奨できません。これを製品の一部として出荷すると、Googleがページのレンダリングを変更するたびにエラーが発生する可能性があります。

+0

解決済み、2016/1/1から2016/1/12の日付範囲を設定し、Google検索結果の各ページに移動する方法を知っています – Vito

+0

Googleで検索を実行しました私はURLパターン**?q = stackoverflow&tbs = cdr:1、cd_min:1/1/2016、cd_max:12/1/2016&tbm = nws **これを達成するのに役立ちます。あなたの問題を解決したので、答えを受け入れてください。 –

関連する問題