java爬虫入门:使用webmagic爬虫,并持久性存储(一)

本文介绍了一位开发者从Python爬虫转向Java爬虫,使用WebMagic框架爬取手表品牌大全网站的过程。文章详细讲述了从前期准备到初次爬取的步骤,包括数据抓取、pipeline处理、XPath使用技巧以及遇到的难点,如Java中XPath的使用区别、节点遍历、数据传递给pipeline等。文章以代码示例说明,并指出爬取过程中页数获取的处理方法,但表示目前代码仍不完善,期待反馈和改进。
摘要由CSDN通过智能技术生成

以前用的是Python语言进行爬虫,现在尝试用Java语言爬虫。我这里爬取的是手表品牌大全网站的爬取,这个网站的爬取我已经用python语言的scrapy进行抓取过,scrapy使用item,pipeline爬取数据,并且上传图片到oss,现在尝试用java语言爬取该网址。
简洁的描述下,爬取这个网址的流程。首先这个网址是没有反爬的,通过爬取这个网址是为了熟悉webmagic爬取的流程,以及抓取数据的方法。该网址有三重跟进,网址入口是展示了所有手表品牌,我们需要把每个品牌都抓下来。
在这里插入图片描述

之后跟进每个品牌的链接,可以看到每个品牌有很多系列。
在这里插入图片描述

之后跟进系列,可以看到该系列的每款手表,需要爬取该系列的信息。注意这里有翻页的情况。
在这里插入图片描述

然后获取每个手表的详细链接,爬取手表的具体信息。

有过scrapy基础的小伙伴,看webmagic的官方文档应该不会很困难,这个爬虫框架参考了scrapy的运行原理,上手会快点。如果没有scrapy基础,也没有关系,webmagic官方文档也简洁明了的介绍了它的运行原理。

前期准备工作

  1. Java语言基础知识 Java 菜鸟教程
  2. 开发软件IDEA,创建maven项目
  3. 了解爬虫的基本流程
  4. 理解webmagic官方文档

初次爬取

这里的爬取,代码是很冗长的。后期会慢慢进行优化。

1.按照webmagic官方文档来,我建了一个iwatch.class

package com.webmagic.demo;

import com.webmagic.pipeline.BrandPipeline;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class iwatch implements PageProcessor {
   

    // 抓取网站的相关配置,包括编码、抓取间隔、重试次数等
    private Site site = Site.me().setRetryTimes(3).setSleepTime(100);

    public Site getSite() {
   
        return site;
    }

    public void process(Page page) {
   
    /*主要爬取代码块*/
    }

    public static void main(String[] args) {
   
        Spider.create(new iwatch())
                .addUrl("http://www.iwatch365.com/brand/")
                .thread(5)
                .run();
    }
}
  1. 在process中先写brand,品牌这块
		/*用if来判断需要处理的是哪种请求,所有的请求,最后都会回到process里面进行处理*/
		/*它不像scrapy那样,有回调函数,可以分开写,各个网址的解析都在这里写*/
		/*初始网址,获取品牌信息*/
        if (page.getUrl().toString().equals("http://www.iwatch365.com/brand/")) {
   
            ArrayList<Map> brand_list = new ArrayList<Map>();
            List<Selectable> nodes = page.getHtml().xpath("//div[@class='list_main']//li").nodes();
            for (Selectable node : nodes
            ) {
   
                Map<String, String> map = new HashMap<String, String>();
                /*这是一堆解析,可以不看*/
                String brand_url = node.xpath("//a/@href").toString();
                String brand_img_url = node.xpath("//a/img/@src").toString();
                String brand_chname = node.xpath(
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值