文档章节

webmagic0.6.0抓取aliyun博客

Mr_Damen
 Mr_Damen
发布于 2017/02/15 16:30
字数 386
阅读 129
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之声明合并(一)

转发 TypeScript基础入门之声明合并(一) 声明合并 介绍 TypeScript中的一些独特概念描述了类型级别的JavaScript对象的形状。 TypeScript特别独特的一个例子是"声明合并"的概念。 在使用现有J...

durban
5分钟前
0
0
Mysql-db

aptitude install default-libmysqlclient-dev pip install mysql-python

dragon_tech
10分钟前
0
0
函数装饰器

def debug(func): def wrapper(*args, **kwargs): # 多个参数# def wrapper(something): # 指定一样的参数 print("[DEBUG]: enter {}()".format(func.__name__)) ......

colin_86
12分钟前
0
0
Notification-状态栏上的通知

当程序并不是出在运行状态的时候,可以调用Notification来显示通知。 1、创建 Notification的创建主要涉及到三个类:NotificationManager,Notification和PendingIntent NotificationManager主...

西米小娅
15分钟前
0
0
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource c

spring boot启动报错: Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determin......

wenzhizhon
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部