我有一个关于解析在线html页面的问题。
当我从Web浏览器打开html源代码时,可以在其中看到数据。
但是,当我从Java读取此html页面时。我无法到达数据。
保存此html文件并将其读取为本地文件后,
然后我就可以从那里读取数据了。
我以eBay.com.au为例。
// - - - - 例 - - - - -
目标网页网址:http://www.ebay.com.au/sch/i.html?_trksid = p3907.m570.l1311&_nkw = imac + 27&_sacat = 0&_from = R40
这是我的Java代码
import org.htmlcleaner.CleanerProperties; import org.htmlcleaner.TagNode; import org.htmlcleaner.HtmlCleaner; import java.net.URL; public class HtmlCleanerTest { public static void main(String[] args) throws Exception { CleanerProperties props = new CleanerProperties(); URL myURL = new URL("http://www.ebay.com.au/sch/i.html?_trksid=p3907.m570.l1311&_nkw=imac+27&_sacat=0&_from=R40"); TagNode tagNode = new HtmlCleaner(props).clean(myURL); Object[] myNodes = tagNode.getElementsByAttValue("class", "s1", true, true); for(Object oNote : myNodes) { TagNode n = (TagNode) oNote; System.out.println(n.getText()); } } }
我可以使用此代码获取每个产品的价格,但我希望通过此代码获得卖家的位置信息。我怎么做?
//-重新编辑-------------------------------
我找到了解决问题的方法,我在这里发贴给了像我这样的人。我并不是说这是最好的解决方案,但我希望它能给您一个思路。这里是。
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import java.util.List;; public class Test{ public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.ebay.com.au/sch/i.html?scp=ce0&_sacat=0&_from=R40&_nkw=imac+27&_pppn=r1&_rdc=1"); driver.findElement(By.id("e1-14")).click(); driver.findElement(By.name("Stores")).click(); driver.findElement(By.id("e1-3")).click(); driver.quit(); } }
/ -------------- ------ END ------- -------------- /
我来到这里有一个问题,如果HTMLFile附带Javascript怎么办,如何在执行完Javascript的情况下从中获取数据。我想我不是很好的发问者。
该页面可能包含一些JavaScript代码,这些代码由浏览器执行,并在HTML加载后将更多数据加载到该页面。仅使用Java读取HTML不会执行JavaScript,因此在流中看不到其他数据。
编辑:像HtmlUnit这样的库可能会在某种程度上帮助解决加载Ajaxified Html页面的常见问题:http://htmlunit.sourceforge.net/