import java.io.IOException;
import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
public class listGrabber {
public static void main(String[]args) {
try {
Document doc = Jsoup.connect("https://play.google.com/store/apps/category/GAME_ACTION/collection/topselling_free").get();
int count = 0;
Elements elements;
String url;
ArrayList<String> list = new ArrayList<>();
do{
elements = doc.select("a[class^=title]").get(count).select("a[class^=title]");
url = "";
url = elements.attr("abs:title").replaceAll("https://play.google.com/store/apps/category/GAME_ACTION/collection/","");
url = url.replaceAll("®|™","");
url = url.replaceAll("[(](.*)[)]","");
list.add(url);
System.out.println(url);
count++;
}while (url!="" &&url!=null);
// String divContents =
// doc.select(".id-app-orig-desc").first().text();
// elements.remove("div");
} catch (IOException e) {
}
}
}
如您所见,我试图从https://play.google.com/store/apps/category/GAME_ACTION/collection/topselling_free
中获取单词列表每次滚动到页面底部时,Google Play商店页面都会加载更多元素。
我的程序将抓住显示的前40个元素,但由于jsoup没有加载动态加载的其余网页,我无法抓住前40个以外的任何元素。
此外,如果您在页面上滚动到游戏#300,则会出现“显示更多”按钮,我还想解析显示更多按钮之外的元素。
有没有办法让Jsoup解析会动态加载到页面上的所有元素?
答案 0 :(得分:5)
编辑 - 在OP的一些评论之后,我完全理解了他想要实现的目标。我改变了一点原始解决方案并进行了测试。
您可以使用<table class="pure-table fullWidth myTable">
<tbody>
<tr class="pure-table-odd">
<td>
<label class="boldText">Bank</label>
</td>
<td>
<label class="boldText">Japha Bank</label>
</td>
</tr>
</tbody>
</table>
<br><br>
<table class="pure-table fullWidth">
<tbody>
<tr class="pure-table-odd">
<td>
<label class="boldText">Bank</label>
</td>
<td>
<label class="boldText">Japha Bank</label>
</td>
</tr>
</tbody>
</table>
执行此操作。在第一页之后,获取下一个页面需要您使用一些标题发送JSOUP
请求。标题包含(以及其他)起始编号和要获取的记录数。如果您发送非法号码(即您要求包含游戏号码700的页面但结果仅包含600场游戏),您将再次获得第一页。您可以循环浏览页面,直到获得已有的结果
有时服务器返回600个结果,有时只返回540,我无法理解为什么
代码是 -
post
代码可以进一步改进(比如以单独的方法处理所有列表),所以由你决定。
我希望这能帮到你。