使用 webMagic 简单爬取维基百科国家对照表

描述

记一次业务使用的国家代码不匹配问题。业务需求根据国家英文名称显示国家中文名称,原项目使用的不准确,不知道哪找来的。

解决方案

解决方案查找维基百科「国家代码对照表」,地址是 https://zh.wikipedia.org/wiki/%E5%9B%BD%E5%AE%B6%E4%BB%A3%E7%A0%81%E5%AF%B9%E7%85%A7%E8%A1%A8

爬出当前表格代码对照表的内容出来,跟现有项目国家代码对比,相比更准确则使用之。

实战

考虑到爬虫,直接选择使用 Java 端的 webMagic 爬虫框架,毕竟环境Demo项目都是现有的,可以5分钟解决。

show code :

package com.starkfang.hello;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

/**
 * @author fang
 * @date 2020/3/6 11:23
 */
public class WebMagic implements PageProcessor {

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

    @Override
    // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
    public void process(Page page) {
        // 部分二:定义如何抽取页面信息,并保存下来
        for (int i = 2; i < 256; i++) {
            String s = page.getHtml().xpath("//*[@id=\"mw-content-text\"]/div/table[1]/tbody/tr[" + i + "]/td[1]/a/text()").toString();
            String s1 = page.getHtml().xpath("//*[@id=\"mw-content-text\"]/div/table[1]/tbody/tr[" + i + "]/td[2]/text()").toString();
            System.out.println("map.put(\"" + s + "\", \"" + s1 + "\");");
        }
    }

    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        Spider.create(new WebMagic())
                //开启5个线程抓取
                .addUrl("http://127.0.0.1/index.html")
                .thread(1)
                //启动爬虫
                .run();
    }
}

写完发现自己按照官方demo,只是加了 「部分二」里的3行代码,for 循环为啥是 2-255呢? 因为是国家代码对照表格的行数。

一些简单技巧

  1. 我这里爬虫的地址是本地 http://127.0.0.1/ ,因为维基百科是需要的,我是直接右键另存为 html 页面,发布到 nginx 再爬的,当然也可以修改代码,使之可以,但本人觉得不需要花时间去翻文档的处理这个,核心是拿内容,所以不处理。
  2. 关于 xpath 地址不会写的问题,可以使用 google 浏览器 右键 「检查」,选中爬列表的行,右键 「copy」–「copy xpath」,

使用 webMagic 简单爬取维基百科国家对照表_第1张图片

你可能感兴趣的:(Java,Java,web)