文档章节

webmagic0.6.0抓取aliyun博客

Mr_Damen
 Mr_Damen
发布于 2017/02/15 16:30
字数 386
阅读 120
收藏 1

抓取网站:https://yq.aliyun.com/articles

lib包:https://github.com/code4craft/webmagic/releases/download/WebMagic-0.6.0/webmagic-0.6.0-all.tar.gz

代码

import java.util.List;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;

public class CrawlAliyun  implements PageProcessor{ 
	
	//入口
	public static final String URL_START ="https://yq.aliyun.com/articles/type_all";
	//分页
    public static final String URL_PAGE = "https://yq.aliyun.com/articles/type_all-order_createtime-page_[0-9]+";
    //标签
    public static final String URL_TAGS = "https://yq.aliyun.com/tags/type_blog-tagid_[0-9]+";
    //博文
    public static final String URL_CONTENT = "https://yq.aliyun.com/articles/[0-9]+";
	
	// 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setCharset("utf-8");

    @Override
    // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
    public void process(Page page) {
        // 部分二:定义如何抽取页面信息,并保存下来
    	Selectable select=null;
    	List<String> urls=null;
    	if (page.getUrl().regex(URL_PAGE).match()||page.getUrl().regex(URL_START).match()) {
    		System.out.println("=====pageurl====="+page.getUrl());
    		select = page.getHtml().xpath("//section[@class='yq-new-list yq-n-l-blog']");
    		
    		urls = select.links().regex(URL_PAGE).all();
    		page.addTargetRequests(urls);
    		
    		urls = select.links().regex(URL_CONTENT).all();
    		page.addTargetRequests(urls);
    	}
    	if (page.getUrl().regex(URL_CONTENT).match()) {
    		System.out.println("=====arturl====="+page.getUrl());
    		select = page.getHtml().xpath("//p[@class='blog-tags']");
    		urls = select.links().regex(URL_TAGS).all();
    		page.addTargetRequests(urls);
    		
    		page.putField("url", page.getUrl().toString());
    		page.putField("title", page.getHtml().xpath("//h2[@class='blog-title']/text()").toString() );
    		page.putField("author", page.getHtml().xpath("//a[@class='b-author']/text()").toString());
    		page.putField("authorUrl", page.getHtml().xpath("//a[@class='b-author']").$("a","href").toString());
    		page.putField("createtime", page.getHtml().xpath("//span[@class='b-time']/text()").toString());
    		page.putField("watched", page.getHtml().xpath("//span[@class='b-watch']/text()").toString().replace("浏览", ""));
    		page.putField("tags",page.getHtml().xpath("//p[@class='blog-tags']/a/text()").all() );
    		page.putField("summary", page.getHtml().xpath("//p[@class='blog-summary']/text()").toString());
    		page.putField("content", page.getHtml().xpath("//div[@class='content-detail']/html()").toString());
    	}
    }

    @Override
   	public Site getSite() {
   		site.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");
   		return site;
   	}

    public static void main(String args[]) {
	    Spider.create(new CrawlAliyun())
	    //从"https://github.com/code4craft"开始抓
	    .addUrl(URL_START)
	    .addPipeline(new JsonFilePipeline("F:\\webmagic\\"))
	    //开启5个线程抓取
	    .thread(5)
	    //启动爬虫
	    .run();
	}
 }

结果

© 著作权归作者所有

共有 人打赏支持
Mr_Damen
粉丝 4
博文 36
码字总数 6809
作品 0
无锡
程序员
Linux的curl命令参数详解

Linux运维常用软件 Curl是Linux下一个很强大的http命令行工具,其功能十分强大。linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,...

成越
2016/08/08
48
0
在阿里云创建Kubernetetes-1.11.0镜像服务(高速)

在阿里云创建Kubernetetes-1.11.0镜像服务(高速) Kubernetetes镜像在国内无法直接访问,导致安装费时、容易出错、难以排查。可以将其抓取到阿里云上面,提前拉取(docker pull)到本地,然...

openthings
07/09
0
0
.Net 安装aliyun-oss

NuGet安装 如果您的Visual Studio没有安装NuGet,请先安装 NuGet。 安装好NuGet后,先在Visual Studio中新建或者打开已有的项目,然后选择工具 > NuGet程序包管理器 > 管理解决方案的NuGet程...

桃子红了呐
01/07
0
0
docker(19):压缩docker python 镜像大小,减少依赖

1,关于python镜像 使用python开发的时候遇到问题。 发现构建之后 镜像还是比较大的。想办法减少点文件啥的。 能让镜像小点,这样发布部署啥的都方便。 2,构建dockerfile python3 在构建pan...

freewebsys
04/16
0
0
Greenplum相关资源

中文社区/博客: 阿里云官网-Greenplum圈:http://yq.aliyun.com/groups/13 阿里云官网-PostgreSQL圈:http://yq.aliyun.com/groups/29 德哥博客:http://blog.163.com/digoal@126/ http://......

rathan0
2016/01/13
32
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

golang使用protobuf简易教程

参考文档:https://blog.csdn.net/qq_15437667/article/details/78425151 一、安装protobuf # 去github.com/golang/protobuf下载源码包,# 拷贝到 $GOPATH/src/github.com/golang/protobuf......

科陆李明
24分钟前
0
0
8月16日 上课截图

小丑鱼00
39分钟前
0
0
Nginx负载均衡、配置SSL

Nginx负载均衡 在 /usr/local/nginx/conf/vhost/ 下创建一个文件,写入以下内容 加载后用curl测试可以访问设置的网站 www.qq.com ssl原理 HTTPS是一种加密的http协议,如果HTTP通信的数据包在...

黄昏残影
43分钟前
0
0
String 源码阅读笔记

String源码阅读 本人学习笔记,内容来自于阅读源码和其他博客,水平有限,如有错误,烦请指正。 详情参考: Java 7 源码学习系列(一)——String 请别再拿“String s = new String("xyz");...

等到烟火清凉_
43分钟前
4
0
Coding and Paper Letter(十二)

资源整理。<!-- more --> 1 Coding: 1.R语言生成的ppt,GeoStat2018会议报告,时空模式分析的报告。 geostat18 2.欧空局哨兵和SMOS的工具集,关于对地观测数据的处理与分析的docker容器。 ...

胖胖雕
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部