有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

twitter使用Java从网页抓取数据?

我正在为我的一个班级创建一个twitter机器人,用来练习使用队列和构建我的简历

我想让机器人从纸上刮下推特手柄。然后向用户发送li时事通讯

下面是一个示例网页。 http://paper.li/profkane/1335985326

我的推理,最初是抓取网页的链接,然后获取页面源,浏览@twitterhandle,然后将它们添加到队列中,以便以后构建消息时使用

我查找了页面来源,但在网页上的任何地方都找不到twitter名称。在Java中仍然可以这样做吗


共 (2) 个答案

  1. # 1 楼答案

    您需要使用支持javascript的库。我使用了HtmlUnit,这是一个很好的复制浏览器行为的库

    有关如何使用javascript访问页面的简单示例,请参见下面我修改的答案from this question

    首先,查看他们的网页(http://htmlunit.sourceforge.net/)以启动并运行htmlunit。确保使用最新的快照(编写此快照时使用2.12版)

    尝试以下设置以忽略几乎所有障碍:

    WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
    webClient.getOptions().setRedirectEnabled(true);
    webClient.getOptions().setCssEnabled(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    webClient.getOptions().setUseInsecureSSL(true);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getCookieManager().setCookiesEnabled(true);
    

    然后,在获取页面时,确保在对页面执行任何操作之前等待后台Javascript,比如等待后台Javascript

    //Get Page
    HtmlPage page1 = webClient.getPage("https://login-url/");
    
    //Wait for background Javascript
    webClient.waitForBackgroundJavaScript(10000);
    
    //Get full page _after_ javascript has rendered it fully
    System.out.println(page1.asXml());    
    

    我希望这个基本的例子能对你有所帮助

    您可以使用HtmlUnit完成浏览器可以完成的几乎任何事情,但需要编程

  2. # 2 楼答案

    至于抓取,您可以抓取整个页面并查找twitter id(或句柄)。当我查看示例页面时,我找不到这样的句柄,但在Twitter图标中有指向用户帐户的链接。你可以用这个来拿把手。如果您正在寻找Java中的刮库,可以尝试一下JSOUP