java为什么我的Jsoup代码没有返回正确的元素?
我正在Android Studio中开发一个应用程序,在使用JSoup抓取网页时遇到了一些问题。我已经成功连接到该网页,并返回了一些基本元素来测试库,但现在我实际上无法获得我的应用程序所需的元素
我正在尝试获取一些具有“data at”属性的元素。奇怪的是,返回了几个带有“data at”属性的元素,但不是我要查找的元素。无论出于何种原因,我的代码没有提取网页上共享“data at”属性的所有元素
这是我正在抓取的网页的URL: https://express.liatoyotaofcolonie.com/inventory?f=dealer.name%3ALia%20Toyota%20of%20Colonie&f=submodel%3ACamry&f=trim%3ALE&f=year%3A2020
包含网页抓取代码的方法:
@Override
protected String doInBackground(Void... params) {
String title = "";
Document doc;
Log.d(TAG, queryString.toString());
try {
doc = Jsoup.connect(queryString.toString()).get();
Elements content = doc.select("[data-at]");
for (Element e: content) {
Log.d(TAG, e.text());
}
} catch (IOException e) {
Log.e(TAG, e.toString());
}
return title;
}
# 1 楼答案
这是因为一些内容(包括您正在寻找的内容)是异步创建的,并且不存在于初始DOM(Javascript;)中
当您查看页面的源代码时,您会注意到只有17个
data-at
出现,而在运行document.querySelector("[data-at]")
时,会返回29个节点在JSoup中可以获得页面的静态内容(初始DOM)。由于没有运行所需的JS脚本,您将无法获取动态创建的内容
为了克服这个问题,您必须手动获取和解析所需的资源(例如跟踪浏览器发出的AJAX调用),或者使用headless browser设置。硒+无头铬就足够了
Letter选项将允许您删除任何可能的web应用程序,包括SPA应用程序,这是使用PlaingJSoup无法实现的