java - 使用Java从网页中抓取数据?

标签 java twitter web-scraping bots headless-browser

我正在为我的一个类(class)创建一个 Twitter 机器人,以练习使用队列并构建我的简历。

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

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

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

我查找了页面源代码,但在网页上的任何位置都找不到 Twitter 名称。这在 Java 中仍然可以做到吗?

最佳答案

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

查看我修改后的答案from this question下面是如何使用 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 执行浏览器可以执行的几乎任何操作,但可以通过编程方式执行。

关于java - 使用Java从网页中抓取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172530/

相关文章:

java - 从 Java 读取 Twitter 页面

java - 为什么我的程序只能获取部分网页源码?

python - 使用 Python 3.4 和 BeautifulSoup 、Requests 抓取文章

java - 艾伦 MQ : Multiple subscription

java - Spring 启动执行: org. apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;V

android - Firebase在android中使用twitter登录,如何添加电子邮件

php - 使用简单的 HTML DOM 遍历表格

java - 将独立的 Tomcat 实例迁移到 Eclipse

Java GUI 正在启动,但没有出现任何内容,堆栈跟踪中没有错误

iPhone- Twitter API GET Users Followers/Following 用户