【问题标题】:Why img tag has no src value after parsing with jsoup?为什么用jsoup解析后img标签没有src值?
【发布时间】:2019-09-29 19:19:36
【问题描述】:

我想从 html img 标签中获取 src 值。 通过chrome和inspect元素我可以看到src的值,但是当我用jsoup库解析它时,src没有值,这是我的代码:

document = Jsoup.connect("http://estelam.rahvar120.ir/index.jsp? 
pageid=2371666&p=1").userAgent(USERAGENT).method(Connection.Method.GET)
.execute().parse();

Element element = document.select("img[id=capimg]").first(); //img 
tag element
String absoluteUrl = element.absUrl("src"); // absoluteUrl = ""
String srcValue = element.attr("src"); // srcValue = ""

该网站无法从其他国家/地区访问,但我想从 html 解析的地方是:

<img id="capimg" alt="Enter Captcha :" 
src="" width="200" height="60">

问题是jsoup在javascript设置src值之前获取html内容,我该怎么办?

【问题讨论】:

  • 您能否分享一个Minimal, Complete, and Verifiable example,包括您要解析的 HTML?
  • @SamuelPhilipp 谢谢,已应用更改。有用吗?
  • 使用您共享的 HTML 测试了您的代码,但它似乎适用于 element.attr("src");。但是你的图片有一个空的 src 标签。
  • @SamuelPhilipp 是的,通过检查元素其可见但在视图源中并在使用 jsoup 解析后。 src 没有价值。
  • 如果 src url 是通过 JavaScript 设置的,Jsoup 无法解析。

标签: android jsoup html-parsing


【解决方案1】:

欢迎来到 SO!

Jsoup 无法解决您面临的问题,因为 Jsoup 是 HTML 解析器而不是浏览器。而且由于它不是浏览器,所以任何用javascript渲染的内容都不会用Jsoup渲染。

您需要的是另一个模拟网络浏览器的工具,例如Selenium

有多种方法可以做到这一点。

  1. 使用 Selenium 处理页面检索和抓取
  2. 使用 Selenium 获取动态页面并使用 JSoup 解析和抓取内容。

我个人推荐第二种方法,因为我更喜欢使用 Jsoup scrape

【讨论】:

  • 仅供参考,它是 scrape(和 scrapingscrapedscraper)不是废品。 “废弃”意味着像垃圾一样扔掉:-(