我有一段代码用于使用Jsoup库从各种网站获取数据。
Connection conn = Jsoup.connect(url);
try {
doc = conn.get();
Element element = doc.getElementById(elementId);
System.out.println(element.html());
} catch (IOException e) {
e.printStackTrace();
}
该代码适用于大多数网站,但是我注意到,对于我正在搜索的其中一个网站,此代码不起作用,因为感兴趣的HTML元素的ID随着每次刷新页面而变化,似乎是在id的末尾附加一个随机数。
这是否有目的地阻止人们抓取数据?如果是这样,绕过它的最佳方法是什么(如果有的话)?
答案 0 :(得分:1)
第一件事:你不应该抓住那些不同意你的网站。
如果您觉得您的抓取是合法的,我会在html代码中查找保持稳定的内容。它不一定是id。类名经常以类似和独特的方式使用。
在您描述的情况下,听起来好像id的基本名称保持稳定。所以你可以这样做:
Element element = doc.select(*[id^=baseID]).first();
这将选择第一个具有以“baseID”开头的id属性的Element。寻找CSS selectors in JSoup以了解更多信息。