package com.yellow.java_pachong.tel2;
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;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.List;
public class GetPhoneNumber implements PageProcessor {
//抓取网站的相关配置
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文档中查找信息的语言,先定位到最近的一个div的idf12作为根部,再根据我们需要的号码一层一层下去,并用集合装
List list = html.xpath("[@id='f12']/table/tbody/tr/td[1]/a/text()").all();
//将文件存到本地
downPhoneNumber(list);
// for (String string : list) {
// System.out.println(string);
// }//控制台遍历打印
}
}
//将爬取到的内容保存到本地
public void downPhoneNumber(List list){
//创建存储位置
File file = new File("H:/桌面/tel2.txt");
//定义流,为了可以在finally处,无论是否成功,都可以关流释放资源。
PrintWriter pw = null;
try {
//输出流
FileOutputStream fos = new FileOutputStream(file);
//字符流
pw = new PrintWriter(fos,true);
//向本地输出
for (String string : list){
pw.println(string);
}
System.out.println("写入完毕!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
//关流
pw.close();
}
}
//程序入口
public static void main(String[] args) {
//创建线程,addUrl爬哪个网址,run启动
Spider.create(new GetPhoneNumber())
.thread(1)
.addUrl("http://www.taohaoma.com/mobile/number?p=1&order=")
.run();
}
}