【发布时间】:2017-12-26 02:42:45
【问题描述】:
我有一个需要从中解析数据的网站。我需要通过关键字结果进行一些搜索。但是,并非所有字段都在产品预览中可见。似乎这些字段(产品颜色、描述、旧价格)只能从每个产品页面中抓取。产品页面的 url 看起来像这样https://www.aboutyou.de/p/new-look/basecap-in-satin-optik-3649077 SI 不知道如何以通用的方式称呼它,所以我不必逐个介绍每个产品。我可以找到项目的名称和品牌,但我不知道如何构建 url - 将所有字母设置为大写并在单词之间添加破折号? 我可以通过这种方式获得品牌名称和产品名称:Satin-Optik 中的 NEW LOOK Basecap。
那么我如何定义每个产品的 url?
这是我目前的代码:
String url = "https://www.aboutyou.de/frauen/accessoires/huete-und-muetzen/caps";
Document doc = Jsoup.connect(url).get();
System.out.println("Title: " + doc.title());
String mainPath = "section.layout_11glwo1-o_O-stretchLayout_1jug6qr > " +
"div.content_1jug6qr > " +
"div.container > " +
"div.mainContent_10ejhcu > " +
"div.productStream_6k751k > " +
"div > " +
"div.wrapper_8yay2a > " +
"div.col-sm-6.col-md-4 > " +
"div.wrapper_1eu800j > " +
"div > " +
"div.categoryTileWrapper_e296pg";
String searchPath = mainPath + " > a.anchor_wgmchy > " +
"div.details_197iil9 > " +
"div.meta_1ihynio";
String linksPath = mainPath + " > a.anchor_wgmchy";
String brandPath = mainPath + " > a.anchor_wgmchy > " +
"div.details_197iil9 > " +
"div.meta_1ihynio > " +
"div.description_ya0ltb > " +
"strong.brand_ke66rm";
Elements result = doc.body().select("main#app");
for(Element element : result) {
Elements products = element.select(searchPath);
Elements links = element.select(linksPath);
Elements brands = element.select(brandPath);
for(Element product : products){
System.out.println(product.text());
}
String[] linksText = null;
for(Element link : links){
String linkHref = link.attr("href");
String linkText = link.text();
linksText = linkHref.split("[\\-]");
String id = linksText[linksText.length-1];
System.out.println("id: " + id);
System.out.print("link attr:" + linkHref + ", ");
}
System.out.print("\nbrands" + brands.text());
}
也许,有一些图书馆可以做到这一点?如有任何建议,我将不胜感激!
【问题讨论】:
标签: java web-scraping jsoup