Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索
一、资源
-
为什么接下来的代码中要使用
el.getElementsByTag("img").eq(0)
?因为:JavaScript中getElementById,getElementsByTagNam和getElementsByClassName的区别与用法
-
ID与CLASS的区别?
-
Lombok Requires Annotation Processing: Do you want to enable annotation processors? Enable
-
.text()
用于获取元素中的文本内容(即被渲染的部分,被<…> <…>包围的内容) -
Java学习-055-Jsoup爬虫通过设置获取响应数据大小的最大值,解决因默认获取 1MB 响应数据导致的无法获取全部的响应数据内容问题
二、数据来源
-
网站:https://www.jd.com/
-
搜索内容:java
-
搜索网址:https://search.jd.com/Search?keyword=java
-
界面截图:
-
数据内容:J_goodsList —> li —> p-name|p-price|img
三、代码
-
xml依赖
<!--Jsoup解析网页--> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
-
实体类
@Data @NoArgsConstructor @AllArgsConstructor public class Content { private String name; private String price; private String img; }
-
工具类
@Component public class HtmlParseUtil { public static void main(String[] args) throws Exception { new HtmlParseUtil().parseJD("java").forEach(System.out::println); } public List<Content> parseJD(String keyword) throws Exception { //获取请求 https://search.jd.com/Search?keyword=java String url = "https://search.jd.com/Search?keyword=" + keyword; ArrayList<Content> contents = new ArrayList<>(); //解析网页 Document document = Jsoup.parse(new URL(url), 300000); //获取产品列表 Element element = document.getElementById("J_goodsList"); //获取产品列表中的li元素 Elements li = element.getElementsByTag("li"); //获取li里面的具体内容 for (Element el : li) { String name = el.getElementsByClass("p-name").eq(0).text(); String price = el.getElementsByClass("p-price").eq(0).text(); String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img"); Content content = new Content(); content.setName(name); content.setPrice(price); content.setImg(img); contents.add(content); } return contents; } }