JSoup无法获得Google搜索结果的正确日期范围

时间:2017-06-03 22:25:58

标签: java html connection jsoup google-search

我已经潜伏了一段时间,但我今天正式加入,因为我在JSoup遇到了很大的问题。我正在创建一个程序,我需要收集Google新闻在您搜索特定主题时提供的小标题和说明。

当我使用此代码时:

(x.getURL()在新闻中提供Google搜索页面,从特定日期到另一个特定日期)

    URLBuilder x = new URLBuilder(q, from.getMmddyyyy(), to.getMmddyyyy());

    String p = x.getURL();
    System.out.println(p);
    doc = Jsoup.connect(p).userAgent("Mozilla").get();
    System.out.println(doc);

    Elements links = doc.select("h3[class=_hJs");
    for (Element link : links) {
        Elements titles = link.select("a[class=l _PMs]");
        String title = titles.text();

        Elements bodies = link.select("div[class=st]");
        String body = bodies.text();

        System.out.println("Title: "+title);
        System.out.println("Body: "+body+"\n");
    }

代码运行良好,但唯一的问题是,不是从我想要的时间给我标题和正文,它给了我html如果你现在谷歌我的查询新闻。例如,我的网址构建器会提供网址(以及输出中打印的网址):

https://google.com/search?q=Apple+&tbm=nws&num=100&tbs=cdr%3A1%2Ccd_min%3A01%2F19%2F2016%2Ccd_max%3A01%2F23%2F2016

如果您关注,那么为您提供Google搜索结果" Apple"每页100个结果,来自新闻,从2016年1月19日到2016年1月23日。然而,当我在下一行打印HTML文档时,它会给出HTML来自Google搜索结果" Apple"每页100个结果,来自新闻,但是从当前日期开始。

这里发生了什么?我已经尝试过所有的东西,但为什么JSoup不会从该特定页面中提供HTML?我已经尝试了所有不同类型的.userAgents,包括完全没有使用它们,但没有使用它。

说真的,如果您对解决方案有一个暗示的想法,请与我分享。我会尝试任何事情,这件事一直在杀我。

2 个答案:

答案 0 :(得分:0)

当您尝试与Jsoup连接时,它会显示最新消息。我不知道为什么会发生这种情况,但您可以在浏览器中找到包含日期范围的页面。所以你可以使用selenium抓取那个页面,你可以这样做;

WebDriver driver = null;
    DesiredCapabilities cap = DesiredCapabilities.chrome();
    cap.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C:\\Users\\PER\\Desktop\\phantomjs-2.1.1-windows\\bin\\chrome.exe");
    cap.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    cap.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "accept-encoding", "gzip, deflate, sdch, br");
    cap.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "Accept-Language", "en-US;q=0.6,en;q=0.4");
    cap.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");

    driver = new ChromeDriver(cap);
    driver.navigate().to("https://google.com/search?q=Apple+&tbm=nws&num=100&tbs=cdr%3A1%2Ccd_min%3A01%2F19%2F2016%2Ccd_max%3A01%2F23%2F2016");;

    String doc = driver.getPageSource();
    Document document = Jsoup.parse(doc);
    System.out.println(doc);

    Elements links = document.select("h3[class=_hJs");
    for (Element link : links) {
        Elements titles = link.select("a[class=l _PMs]");
        String title = titles.text();

        Elements bodies = link.select("div[class=st]");
        String body = bodies.text();

        System.out.println("Title: "+title);
        System.out.println("Body: "+body+"\n");
    }

你也需要导入这些;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;

答案 1 :(得分:0)

此代码有效:

package jhy;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;

public class NewsTest {
    public static void main(String... args) throws IOException {
        String url = "https://google.com/search?q=Apple+&tbm=nws&num=100&tbs=cdr%3A1%2Ccd_min%3A01%2F19%2F2016%2Ccd_max%3A01%2F23%2F2016";
        Document doc = Jsoup.connect(url).get();

        Elements links = doc.select("h3 a");
        for (String title : links.eachText()) {
            System.out.println(title);
        }
    }
}

输出:

Apple's First iOS App Development Center In Europe Will Be ...
Apple wins court order banning sale of old Samsung phones
Apple, Microsoft, Samsung Linked To Child Mining In DRC, Says ...
Apple Eyes Launching Stores In India
Apple Veteran Overseeing Electric-Car Project Leaving Company

请确保您正在使用latest version of jsoup(今天的1.10.3)。如果在先前版本中处理了带有%xx的重定向,可能会影响到您。