使用webmagic 爬取天气网站

来源:互联网 发布:最新网络流行语段子 编辑:程序博客网 时间:2024/06/11 10:18

在WebMagic里,实现一个基本的爬虫只需要编写一个类,实现PageProcessor接口即可。这个类基本上包含了抓取一个网站,你需要写的所有代码。

该例子使用webmagic爬取天气网上杭州的历史天气数据,使用Jsoup解析页面,代码如下:

package com.yelling.weather.spider;import java.util.List;import org.apache.commons.lang.StringUtils;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;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.Html;import us.codecraft.webmagic.selector.Selectable;public class WeatherRepoPageProcessor implements PageProcessor {    // 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);    private String [] tit = {"最高气温:\t","最低气温:\t","天气:\t","风向:\t","风力:\t"};    public void process(Page page) {        // 部分二:定义如何抽取页面信息,并保存下来        String url = page.getUrl().toString();        //System.out.println(url);        if(!url.endsWith("index.html")&&url.endsWith("html")){            Html html = page.getHtml();            //获取城市名            String city = html.xpath("//*[@id=\"tool_site\"]/div[1]/h3").toString();            city = city.substring(city.indexOf(">") + 1, city.indexOf("20"));            //System.out.println(city);            String content = html.toString();            Document docList = Jsoup.parse(content);            //定位到class            Elements es = docList.getElementsByClass("tqtongji2");            //定位到ul            Elements UlTag = es.get(0).getElementsByTag("ul");            for (int j = 1; j < UlTag.size(); j++) {                Element obj = UlTag.get(j);                Elements LiTag = obj.getElementsByTag("li");                Element li1 = LiTag.get(0);                //获取某日天气详情链接                String ss = li1.getElementsByTag("a").get(0).html();                System.out.println(city+"\t"+ss);                //获取每个li标签数据                for(int i = 1;i<LiTag.size();i++){                    System.out.println(tit[i-1]+LiTag.get(i).html());                }                System.out.println("*******************");                // System.out.println(LiTag.html());            }        }        // 部分三:从页面发现后续的url地址来抓取        //爬取杭州历年的天气数据        page.addTargetRequests(page.getHtml().links().regex("http://lishi\\.tianqi\\.com/[a-z]+/[\\d]+\\.html").all());        page.addTargetRequests(page.getHtml().links().regex("http://lishi\\.tianqi\\.com/hangzhou/index\\.html").all());    }    public Site getSite() {        return site;    }    public static void main(String[] args) {        //添加种子url,并打开5个线程开始爬虫        Spider.create(new WeatherRepoPageProcessor()).addUrl("http://lishi.tianqi.com").thread(5).run();    }}

运行结果:

运行结果

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 锤基意外怀孕怎么办 08 蛐蛐罐底翻砂了怎么办 剑网3中被盗号后怎么办 本人想离婚对方躲避怎么办 微信不能说语音怎么办 微信语音发不了怎么办 吃鸡语音用不了怎么办 要杀我的人见面怎么办 转晕了想吐怎么办 原地转圈头晕恶心想吐怎么办 孩子吃凉的呕吐头还晕怎么办 孩子转晕了想吐怎么办 转圈晕了想吐怎么办 我爸总是骂我妈怎么办 转圈转的想吐怎么办 大便干燥拉不出来怎么办 吹完头发很干燥怎么办 腿摔伤了结痂疼怎么办 蹭wifi被禁止后怎么办 电脑wifi给拉黑怎么办 电脑想用无线网怎么办 中路被对方打崩了怎么办 英雄联盟队友太坑怎么办 匹配被王者虐了怎么办 lol碰到嘴臭的怎么办 小婴儿脾气大怎么办呢? 玩游戏输入法会跳出出来怎么办 逆水寒fps太低怎么办 我dcj没地速怎么办 电焊看久眼睛疼怎么办 装修忘了窗帘盒怎么办? 纹眉导致眼肿了怎么办 哭泣引起的眼肿怎么办 在酒店忘记拉窗帘了怎么办 湿气重喉咙有痰怎么办 眼睛上火了肿了怎么办 陌陌直播没人看怎么办 陌陌直播没人气怎么办 我真的爱上你了怎么办 弯腰时间久了腰疼怎么办 斗鱼pk输的怎么办