java爬虫抓取动态网页(不是学Python的人员才能做的么?我们Java能做呢?)

优采云 发布时间: 2022-02-27 18:25

  java爬虫抓取动态网页(不是学Python的人员才能做的么?我们Java能做呢?)

  由于阿凡经历了上一次大数据杀戮事件,可见目前的平台对用户非常不友好。只要您经常搜索某些 关键词,它通常更具对比性。我在最高峰直接买,就像买股票一样,总觉得每次都能买到底部,却不知道是在天台买的。于是阿芬想了个办法,把所有的数据都拉下来,自己对比了一下,就停止了搜索。省级平台总是根据我的搜索内容推荐。

  

  如何用Java做爬虫

  说到爬虫,大家肯定想说,爬虫,这难道不是只有学过Python的人才能做到的吗?我们可以在 Java 中做什么?阿凡想告诉大家的是,是的,Java语言已经存在这么多年了,怎么可能没有这样的内容,于是阿凡开始学习Java的爬虫之路。

  汤

  在介绍这门课之前,阿凡必须先说说我们平时看到的内容是由什么组成的。现在举个例子,我们都知道,我们在做开发的时候,至少我们在电脑上访问某东某某宝的数据时,他们给我们反馈的数据是通过HTML展示出来的,例如:

  

  参与开发的每个人都必须知道这些是什么意思。这里就不做详细介绍了,说一下这个HTML是什么。阿凡需要介绍的是Jsoup,然后告诉大家怎么用。Jsoup 这个类爬取京东的数据。

  正如官方文档向我们建议的那样,如何解析一段 HTML 代码:

  String html = "First parse"

+ "<p>Parsed HTML into a doc.";

Document doc = Jsoup.parse(html);

</p>

  这个文件是什么?我们可以看看输出,看看源代码解释。毕竟,如果一个开发人员看不到这个类的用途,他就不是一个合格的程序员。

  输出:

  

First parse

<p>Parsed HTML into a doc.

</p>

  其实这里可以看出,Document其实是为我们输出了一个新的文档,并且是排序好的,相当于为后续的HTML分析做专业的准备。

  

  当我们看源码的注释时,不难看出Jsoup不仅可以解析我们给的字符串,还可以解析URL或者文件。

  它将我们给他的HTML字符串转换成一个对象,也就是我们上面看到的Document,然后我们就可以顺利的使用Document对象中的元素了。

  上面是解析字符串,那我们看看是否存在下面的解析URL:

   public static void main(String[] args) {

try {

Document doc = Jsoup.connect("https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_f38cf584e9fb4328a3e0d2bb515e1458").get();

String title = doc.title();

System.out.println(title);

}catch (IOException e){

e.printStackTrace();

}

}

  如果你执行以下,你就能看到标题是什么,结果是这样的:

  

  是不是和我们在百度上搜索的时候不一样,因为这是进入后的首页。

  元素

  我们看源码可以清楚的看到Document是继承了Element的类,所以一定可以调用Element中的方法,例如:

  getElementById(String id); //是不是有点眼熟,像不像Js里面的ID选择器

getElementsByTag(String tagName);// 通过标签来选择

getAllElements();//获取所有的Element的元素

  至于方法,阿凡就不一一描述了。有兴趣的可以去官方文档,或者去源码,把包名发到包org.jsoup.nodes

  有些人一定是生气了。如果你说阿芬,就不要介绍了。那你废话太多了。快速介绍一下京东。好的,让我们开始吧。

  爬取之前一定要分析一下京东的网站,比如我搜索硬盘:

  

  下面是一堆数据,我们需要解析的是HTML中最有用的部分,比如:

  

¥879.00

  这里我们写下价格,然后我们寻找我们想要的名字

  

  看,p-name就是我们需要的名字,然后我们就可以写代码了。

   //这是京东的搜索网址,我们把这个keyword关键词提取出来,注意中英文,中文要处理一下

String url = "https://search.jd.com/Search?keyword=" + keyword;

url = url + "&enc=utf-8";

Document document = Jsoup.parse(new URL(url), 40000);

//我们先找这个 List,然后一层一层的遍历

Element element = document.getElementById("J_goodsList");

Elements elements = element.getElementsByTag("li");

for (Element el : elements) {

String img = el.getElementsByTag("img").eq(0).attr("source-data-lazy-img");

String price = el.getElementsByClass("p-price").eq(0).text();

String title = el.getElementsByClass("p-name").eq(0).text();

String shop = el.getElementsByClass("p-shop").eq(0).text();

System.out.println("=========================");

System.out.println("标题:" + title);

System.out.println("图片url:" + img);

System.out.println("店铺:" + shop);

System.out.println("价格:" + price);

}

  我们看一下实现的效果图:

  

  如果还有兴趣,可以直接在for循环中新建一个对象,得到一个List集合,然后在最后执行插入数据库的方法,这样数据就可以完整保存了。毛呢布?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线