java webmagic 使用_使用 | Java使用WebMagic 爬取网站

news/2024/5/10 0:55:08/文章来源:https://blog.csdn.net/weixin_35132022/article/details/114137604

小小又开始学习了,这次跟着项目学习着,需要使用一个相关的爬虫,这里使用的是webmagic作为网站的爬虫。

安装

这里使用maven进行安装。

根据maven下载相关的包

us.codecraft

webmagic-core

0.7.3

us.codecraft

webmagic-extension

0.7.3

Hello World

几乎所有的api的学习,都是从hello world开始的,webmagic也不例外,使用的同样也是hello world案例。

以爬取sina博文为例。

复制以下代码

package com.example.demo;

import us.codecraft.webmagic.Page;

import us.codecraft.webmagic.Site;

import us.codecraft.webmagic.Spider;

import us.codecraft.webmagic.processor.PageProcessor;

public class SinaBlogProcessor implements PageProcessor {

public static final String URL_LIST = "http://blog\\.sina\\.com\\.cn/s/articlelist_1487828712_0_\\d+\\.html";

public static final String URL_POST = "http://blog\\.sina\\.com\\.cn/s/blog_\\w+\\.html";

private Site site = Site

.me()

.setDomain("blog.sina.com.cn")

.setSleepTime(3000)

.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");

@Override

public void process(Page page) {

//列表页

if (page.getUrl().regex(URL_LIST).match()) {

page.addTargetRequests(page.getHtml().xpath("//div[@class=\"articleList\"]").links().regex(URL_POST).all());

page.addTargetRequests(page.getHtml().links().regex(URL_LIST).all());

//文章页

} else {

page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2"));

page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']"));

page.putField("date",

page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\\((.*)\\)"));

}

}

@Override

public Site getSite() {

return site;

}

public static void main(String[] args) {

Spider.create(new SinaBlogProcessor()).addUrl("http://blog.sina.com.cn/s/articlelist_1487828712_0_1.html")

.run();

}

}

查看相关运行结果

AAffA0nNPuCLAAAAAElFTkSuQmCC

这里就等于说已经运行成功,爬取到了一些数据

PageProcessor

这里用于实现相关的配置。

代码如下

public class GithubRepoPageProcessor implements PageProcessor {

// 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等

private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

@Override

// process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑

public void process(Page page) {

// 部分二:定义如何抽取页面信息,并保存下来

page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());

page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());

if (page.getResultItems().get("name") == null) {

//skip this page

page.setSkip(true);

}

page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));

// 部分三:从页面发现后续的url地址来抓取

page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/[\\w\\-]+/[\\w\\-]+)").all());

}

@Override

public Site getSite() {

return site;

}

public static void main(String[] args) {

Spider.create(new GithubRepoPageProcessor())

//从"https://github.com/code4craft"开始抓

.addUrl("https://github.com/code4craft")

//开启5个线程抓取

.thread(5)

//启动爬虫

.run();

}

}

抽取元素

这里使用相关的方法抽取元素。

这里使用相关的方法抽取相关的元素

List urls = page.getHtml().css("div.pagination").links().regex(".*/search/\?l=java.*").all();

保存结果

这里保存结果使用Pipeline方法

public static void main(String[] args) {

Spider.create(new GithubRepoPageProcessor())

//从"https://github.com/code4craft"开始抓

.addUrl("https://github.com/code4craft")

.addPipeline(new JsonFilePipeline("D:\\webmagic\\"))

//开启5个线程抓取

.thread(5)

//启动爬虫

.run();

}

实际案例

这里以 http://blog.sina.com.cn/flashsword20 作为例子,在这个例子里,要从最终的博客文章页面,抓取博客的标题,内容,和日期。

列表页

文章页

进行正则匹配

这里用两个正则进行匹配。

这里用,xpath//div[@class=\“articleList\”] 进行相关的匹配,

所以,可以这样进行匹配

page.addTargetRequests(page.getHtml().xpath("//div[@class=\"articleList\"]").links().regex("http://blog\\.sina\\.com\\.cn/s/blog_\\w+\\.html").all());

page.addTargetRequests(page.getHtml().links().regex("http://blog\\.sina\\.com\\.cn/s/articlelist_1487828712_0_\\d+\\.html").all());

内容的添加

这里再进行一次内容的添加

page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2"));

page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']"));

page.putField("date",

page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\\((.*)\\)"));

区分列表和目标页

这里,进行区分列表页,和目标页。

//列表页

if (page.getUrl().regex(URL_LIST).match()) {

page.addTargetRequests(page.getHtml().xpath("//div[@class=\"articleList\"]").links().regex(URL_POST).all());

page.addTargetRequests(page.getHtml().links().regex(URL_LIST).all());

//文章页

} else {

page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2"));

page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']"));

page.putField("date",

page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\\((.*)\\)"));

}

这样就完成了最基本例子的读取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_796559.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux shell监控网站延迟,shell脚本监控网站状态

给大家发个不错的网站监控shell,当然说它功能强大也不是很强大,但配置上很灵活,因为此脚本的作用是按固定频率不停访问给出的URL,当网站不可访问时自动给设定邮箱发送告警邮件以通知用户.好了.来看脚本吧.#!/bin/sh# */2 * * * * sh /var/monitor/web_monitor.sh http:///blog.…

Vue ElementUI el-tabs 监听导航栏的mouseover 和 mouseleave 事件

需求 项目需要对 el-tabs 的导航栏做鼠标监听事件&#xff0c;但官网仅有如下点击事件。所以另辟蹊径&#xff0c;对 class"el-tabs__nav-scroll" 做监听。 示例 <template><div><el-tabs class"my-tabs" v-model"activeName" …

网站的分布式架构学习

转载学习地址&#xff1a;http://www.cnblogs.com/sharpxiajun/archive/2013/05/11/3072798.html 网站的B/S技术架构图 在传统B/S架构的企业管理系统里&#xff0c;技术架构往往就是一个工程项目&#xff0c;各个逻辑分层都是该工程的业务逻辑模块。但是作为提供公共服务的网站…

做网站用UTF-8还是GB2312?

转载自 http://justjavac.javaeye.com/blog/695252 经常我们打开外国网站的时候出现乱码&#xff0c;又或者打开很多非英语的外国网站的时候&#xff0c;显示的都是口口口口口的字符&#xff0c; WordPress程序是用的UTF-8&#xff0c;很多cms用的是GB2312。 ● 为什么有这么…

小型电子商务网站设计原则

最近谈得最多的话题莫过于大规模&#xff0c;大数据量&#xff0c;高性能&#xff0c;高并发等架构话题&#xff0c;其实一个电子商务网站开始时一定是小规模&#xff0c;小数据量&#xff0c;用不着把架构弄得过于复杂。高度设计、过度扩展(高德纳大爷也说过&#xff0c;"…

Mysql在大型网站的应用架构演变

写在最前: 本文主要描述在网站的不同的并发访问量级下&#xff0c;Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关&#xff0c;没有并发的增长&#xff0c;也就没有必要做高可扩展性的架构&#xff0c;这里对可扩展性进行简单介绍一下&#xff0c;常用的扩展手段…

(转载)可扩展、高可用、负载均衡网站架构设计方案

可扩展、高可用、负载均衡网站架构设计方案作者&#xff1a;田逸(sery163.com) 本作品已刊登在《IT实验室周报》第6期第6版 基本需求: 1、 高可用性&#xff1a;将停止服务时间降低到最低甚至是不间断服务 2、 可扩展性&#xff1a;随着访问的增加&#xff0c;系统具备良好的…

MOUSEOVER在拼接的HTML无效处理

正常情况下&#xff1a; //鼠标移入移出&#xff08;顶部企业图标信息&#xff09;$(".patternBg").mouseover(function (){ $(".enterpriseContent").show(); }).mouseout(function () {$(".enterpriseContent").hide();}); 修改成&#x…

SQl语句查存储过程\触发器\约束(网站数据库转移缺漏审查)

网站开发最让我们头疼的就是数据的架构.本地开发很轻松.程序只需要打包dll就可以了,但是数据库要架设到空间服务器上,就要转移.一不小心就会忘了一些存储过程,触发器,约束.这里为大家提供几个查用的检查.能够快速找出有哪些东西是忘记传了.很实用.有好的方法,请知道. 该条语句查…

从小型网站到超大规模网站的MySQL参考架构

Oracle发布《面向大规模可伸缩网站基础设施的MySQL参考架构》白皮书&#xff0c;针对将MySQL用作数据存储的不同类型和不同规模的网站给出了推荐的拓扑结构。 根据分别提供4类服务——用户和会话管理、电子商务、分析类应用 (多结构数据)和CMS&#xff08;元数据&#xff09;—…

在不同尺寸屏幕下浏览网站效果 - Responsivator

如果你需要开发响应式的网站的话&#xff0c;使用一个必要的浏览工具来检验不同尺寸屏幕下显示效果还是非常有用的&#xff0c;在今天的这篇文章中&#xff0c;我们再给大家介绍另外一个不错的在线工具 - Responsivator&#xff0c;它提供了很多不同的尺寸屏幕的展示效果&#…

行业网站设计心得

作者&#xff1a;何迁 时间&#xff1a; 2004-08-18 文档类型&#xff1a;原创 来自&#xff1a;蓝色理想 浏览统计 total:11158 | year:596 | Quarter:596 | Month:596 | Week:47 | today:7 很多设计师认为做好了企业网站就一定能够做好行业网站的设计&#xff0c;其实对设…

云计算之路-阿里云上:网站故障致歉

后续进展&#xff1a;云计算之路-阿里云上&#xff1a;向大家汇报一下今天上午的网站故障 今天上午&#xff08;5月16日&#xff09;9:30~9:40左右&#xff0c;下午16:30~17:00左右&#xff0c;由于博客站点的Web服务器CPU大幅波动&#xff08;有如坐过山车&#xff09;&#x…

带给你灵感的20个漂亮的单页网站设计作品

带给你灵感的20个漂亮的单页网站设计作品 单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做…

寻找网页设计灵感的27个最佳网站推荐

今天&#xff0c;本文要向大家推荐的是27个寻找网页设计灵感的最佳网站。设计师们可通过这些网站收集的优秀网页设计作品来获取灵感&#xff0c;进而设计出更加时尚、更有创意的作品。如果你有收藏这个列表中遗漏的网站&#xff0c;欢迎在评论中与大家分享。 CSS Nature Desig…

优秀网页设计:20佳别出心裁的国外单页网站作品

单页网站是非常好的灵感来源&#xff0c;这些网站界面简洁、主题突出、设计精美&#xff0c;有创意的动态效果&#xff0c;带给访客强烈的视觉冲击。这种形式的网站需要把内容都放在一个页面中&#xff0c;只有重要内容才会展现在屏幕中。下面收集了20佳优秀的单页网站作品&…

2068个开源的网站模板

在网上溜达的时候发了这个好网站——opendesigns.org&#xff0c;上面分享了2068个免费的网站模板。提供了搜索功能&#xff0c;可以根据风格和功能&#xff08;艺术、教育、画廊、杂志、作品集、电子商务等&#xff09;、颜色以及关键字搜索模板&#xff0c;高级搜索模式还支持…

『优秀作品』20个激发灵感的橙色风格网站设计

『优秀作品』20个激发灵感的橙色风格网站设计 橙色是一种欢快活泼的色彩&#xff0c;是暖色系中最温暖的色&#xff0c;它使人联想到金色的秋天&#xff0c;丰硕的果实&#xff0c;是一种富足、快乐而幸福的颜色。今天&#xff0c;本文收集了20个橙色风格的网页设计作品与大家分…

网站项目必备——12款经典的白富美型 jQuery 图片轮播插件

图片轮播是网站中的常用功能&#xff0c;用于在有限的网页空间内展示一组产品图片或者照片&#xff0c;同时还有非常吸引人的动画效果。本文向大家推荐12款实用的 jQuery 图片轮播效果插件&#xff0c;帮助你在你的项目中加入一些效果精美的图片轮播效果&#xff0c;希望这些插…

分享50个优秀的电子商务网站设计案例

对于电子商务网站来说&#xff0c;也许销售更多产品比漂亮的外观设计更重要&#xff0c;不过漂亮的东西总是能给用户留下深刻的印象。今天&#xff0c;这篇文章与大家分享50个优秀的电子商务网站设计作品案例&#xff0c;希望能带给你灵感。 Free People Me & Mommy-to-be…