View Javadoc
1   package us.codecraft.webmagic.samples;
2   
3   import us.codecraft.webmagic.Page;
4   import us.codecraft.webmagic.Site;
5   import us.codecraft.webmagic.processor.PageProcessor;
6   
7   import java.util.List;
8   
9   /**
10   * @author code4crafter@gmail.com <br>
11   */
12  public class DiandianBlogProcessor implements PageProcessor {
13  
14      private Site site;
15  
16      @Override
17      public void process(Page page) {
18          //a()表示提取链接,links()表示提取所有链接
19          //getHtml()返回Html对象,支持链式调用
20          //r()表示用正则表达式提取一条内容,regex()表示提取多条内容
21          //toString()表示取单条结果,all()表示取多条
22          List<String> requests = page.getHtml().links().regex("(.*/post/.*)").all();
23          //使用page.addTargetRequests()方法将待抓取的链接加入队列
24          page.addTargetRequests(requests);
25          //page.putField(key,value)将抽取的内容加入结果Map
26          //x()和xs()使用xpath进行抽取
27          page.putField("title", page.getHtml().xpath("//title").regex("(.*?)\\|").toString());
28          //smartContent()使用readability技术直接抽取正文,对于规整的文本有比较好的抽取正确率
29          page.putField("content", page.getHtml().smartContent());
30          page.putField("date", page.getUrl().regex("post/(\\d+-\\d+-\\d+)/"));
31          page.putField("id", page.getUrl().regex("post/\\d+-\\d+-\\d+/(\\d+)"));
32      }
33  
34      @Override
35      public Site getSite() {
36          //site定义抽取配置,以及开始url等
37          if (site == null) {
38              site = Site.me().setDomain("progressdaily.diandian.com").
39                      setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");
40          }
41          return site;
42      }
43  }