【发布时间】:2015-01-10 21:32:36
【问题描述】:
所以这是一个非常简单的问题,我只是想知道,有没有人知道我将如何做到这一点,最好使用纯 java/至少可以从 Java 程序执行的代码?
目前我正在使用以下方法从服务器下载网页:
URL url = new URL(u);
URLConnection uc = url.openConnection();
uc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
InputStream inputStream = uc.getInputStream();
FileOutputStream outputStream = new FileOutputStream("currentImagePage.html");
int bytesRead = -1;
int BUFFER_SIZE = 4096;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
返回的 HTML 文档可以在这里看到: http://pastebin.com/262h22PQ
如果您查看第 110 行,那是我能看到的唯一真正有趣的东西:
<script type="text/javascript">
window._strings = {
//other random crap
"%(count)s people liked this photo": "%(count)s people liked this photo",
但是无论如何我可以访问 count 变量吗?如果有的话,我会很感激任何能指出我正确轨道的人
我实际上有一个有效的方法,但是它涉及使用 selenium 的 webdriver 加载网页,然后调用 .getPageSource() 方法。这将返回以下页面源:
正如 Instagram 所说的“[user x]、[user y]、[user z] & [number of others] like this”,您可以从字符串中提取它并获得以下行:
<span data-reactid=".0.0.1.0.0.0.0.0.0.1.0.0.0:1.$tx7:0" class="llRemainingCount">3,511</span>
这种方法存在一个问题...必须加载可能成千上万的图像页面才能提取喜欢的数量非常慢。
所以我想我真正要问的是 1)我能否获得第一个方法来返回与方法 2 或 2 相同的页面源)无论如何我可以访问方法 1 中的 %(count) 变量吗?或者如果有人有更好的解决方案,我将不胜感激:)
干杯!
【问题讨论】:
标签: java html web-scraping extract instagram