一个项目里需要实现 java 爬虫,爬取这个网站中的图片和标题
通过 Xpath 语句 //div[contains(@class,"article-img")]很快就获取到了所需要的 Elements 对象,但奇怪的是 Elements 对象中有所需要的内容,打印也能正常展示,但是一旦遍历 Elements 尝试去获取标签属性就打印不出任何结果,调用获取所有属性方法并打印就只能打印出后两个我不需要的属性,但是前面打印的时候我需要的属性又还在
代码如下
@Override
public R crawler() {
try(WebClient webClient = WebClientUtils.getWebClient()){
System.out.println("开始爬取.....");
// WebRequest webRequest = new WebRequest(new URL("https://www.cnhnb.com/xt/search/?%E6%9F%91%E6%A9%98%E5%87%A4%E8%9D%B6"), HttpMethod.GET);
// HtmlPage page = webClient.getPage(webRequest);
// Document document = Jsoup.parse(page.asXml());
String url = "https://www.cnhnb.com/xt/search/?%E6%9F%91%E6%A9%98%E5%87%A4%E8%9D%B6";
Document document = Jsoup.connect(url).get();
Elements elements = document.selectXpath("//div[contains(@class,\"article-img\")]");
System.out.println(elements.size()); //大小显示为 10
System.out.println(elements.html()); //elements 有结果,能正确打印出内容
for (Element element : elements) {
System.out.println(element.html());//能正确打印出内容,注释为打印结构
/*
<img alt="花椒凤蝶怎么防治?" src="//files.cnhnb.com/master-ssr/hammer/img/2a7149c.jpg" class="s-img-default" data-v-36fd24c6 data-v-1dc19fe0>
*/
System.out.println(element.attr("alt")); //无内容
System.out.println(element.attr("src")); //无内容
Attributes attributes = element.attributes();
for (Attribute attribute : attributes) {
System.out.println(attribute.html()); //打印出后两个属性,注释为打印结果
/*
class="article-img"
data-v-1dc19fe0
*/
}
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
我测试爬虫功能的方式开启项目之后打开本地 Swagger 并调用方法 这个问题我搞了两天都没有解决,去网上查也没看到谁有类似问题,和学长交流两三天了我啥方法都试过了也不行,实在没办法了我才来求教各位,来个大佬救救
1
seanzxx 2023-03-19 06:06:31 +08:00
System.out.println(element.attr("alt")); //无内容
System.out.println(element.attr("src")); //无内容 你要明白现在的 Element 是什么内容?根据你的 xpath ,Element 其实是 div ,根本没有 alt 和 src 两个属性。 你可以用 firstElementChild 定位到 img System.out.println(element.firstElementChild().attr("alt")); System.out.println(element.firstElementChild().attr("src")); 本地测了一下,就可以打印出内容了 |
2
tiRolin OP @seanzxx 谢谢你大佬,你的回复完美解决了我的问题,不过我还有一个问题想请教一下你,就是目前我获取到的图片属性总是这样的 //files.cnhnb.com/master-ssr/hammer/img/2a7149c.jpg ,这种无法正确加载图片,跟网页里看到的 URL 地址不一样,就我再来问你一下
|
3
ALLROBOT 2023-03-20 08:03:21 +08:00
可能是 js 动态加载?
|