文档章节

webmagic0.6.0抓取aliyun博客

Mr_Damen
 Mr_Damen
发布于 2017/02/15 16:30
字数 386
阅读 139
收藏 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
docker(19):压缩docker python 镜像大小,减少依赖

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

freewebsys
04/16
0
0
.Net 安装aliyun-oss

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

桃子红了呐
01/07
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

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部