1

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

我希望机器人从 paper.li 时事通讯中抓取 Twitter 句柄,然后向用户发送推文。

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

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

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

4

2 回答 2

1

您需要使用支持 javascript 的库。我为此使用HtmlUnit,这是一个用于复制浏览器行为的出色库!

有关如何使用 javascript 访问页面的简单示例,请参阅下面这个问题的修改后的答案。

首先,查看他们的网页 ( 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 执行浏览器可以执行的几乎所有操作,但以编程方式执行。

于 2013-03-02T09:04:46.830 回答
0

就抓取而言,您可以抓取整个页面并查找 twitter id(或句柄)。当我检查示例页面时,我找不到这样的句柄,但在 Twitter 图标中有指向用户帐户的链接。您可以使用它来获取句柄。如果你正在寻找 Java 中的抓取库,你可以试试 JSOUP。

于 2013-03-02T09:07:35.593 回答