通過WebMagic框架抓取網頁中的手機號(實驗練習一)

話不多說,直接上代碼,代碼中註釋都寫的很清楚了!!!

這樣吧,加一個流程圖,用來方便的瞭解WebMagic

package com.softeem.demo;

import java.awt.print.Pageable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.List;

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;

/**
 * 
 * @author 張智遠
 *
 *WebMagic框架 使用Java原生開發方式
 *核心很簡單,功能性給簡單性讓步
 *四個核心組件
 *PageProcessor 負責解析頁面
 *Scheduler負責管理待抓取的URL
 *Pipeline 負責抽取結果處理,做持久化操作
 *Downloader 負責從網上下載頁面
 */
public class GetPhoneNumber implements PageProcessor{
    PrintWriter pw=null;
     //抓取網站的相關配置
    private Site site=Site.me()
            .setCharset("utf-8")//設置字符集
            .setTimeOut(10000)//設置超時時間
            .setRetrySleepTime(3)//設置重試次數
            .setSleepTime(1000);//設置休眠時間
    @Override
    public Site getSite() {
        return site;
    }
     //爬取邏輯
    @Override
    public void process(Page page) {
        //獲取到通過Downloader下載下來的URL
        Selectable url=    page.getUrl();
        System.out.println(url);
        //通過正則表達式去匹配是否是我們想要的抓取的網頁URL 正則表達式只能匹配格式的爭取行,不能檢驗數據的有效性
        if(url.regex("http://www.taohaoma.com/mobile/number\\?p=\\d&order=").match()) {
            //開始抓取有用信息
            //System.out.println("匹配成功!");
            //獲取頁面信息
            Html html=page.getHtml();
            //System.out.println(html);
            //通過Xpath去解析Html  Xpath是w3c XSLT標準的主要元素 還是一門在xml文檔中查找信息的語言
            //XQuery和Xpointer都是構建在Xpath之上
            List<String> list=html.xpath("[@id='f12']/table/tbody/tr/td[1]/a/text()").all();//用id進行定位
            //將文件保存到本地
            downPhoneNumber(list);
            for (String string : list) {
                System.out.println(string);
            }
            
        }
    }
    //將內容存放到本地的方法
    public void downPhoneNumber(List<String> list) {
        //描述存的位置路徑文件
        File file=new File("D:/phoneNumber1.txt");
        
        try {
            //輸出流
            FileOutputStream fos=new FileOutputStream(file);
            //字符流
             pw=new PrintWriter(fos,true);
            //往本地輸出
            for (String string : list) {
                pw.println(string);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if(pw!=null)pw.close();
        }
        
    }
    
    //程序入口
    public static void main(String[] args) {
        Spider.create(new GetPhoneNumber())
        .thread(1)
        .addUrl("http://www.taohaoma.com/mobile/number?p=1&order=")
        .run();
    }
    
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章