WebMagic原理及应用心得

webmagic框架

用起来很方便,不用配置,把核心包导入后, 通过实现PageProcessor接口   

下面四部分是框架的核心组件

  • Downloader负责从互联网上下载页面(一般情况不用我们管,我们只要找到页面指定路径它通过httpClient请求方式获取,框架自动下载)(底层---通过Downloader接口的download方法,然后用HttpClientDownloader去实现它,至于IP,端口等参数,这个框架是通过代理的形式传入,进行http请求,下载web页面)
  • PageProcessor负责解析页面,抽取有用信息,以及发现新的链接(这个接口,我们实现它,在方法中想办法获取页面的地址,以及目标页的内容)(底层----也是要实现这个接口中的process()方法,进行需要的数据的提取)
  • Scheduler负责管理待抓取的URL,以及一些去重的工作(如果只是控制台输出用不到这个方法,调用这个方法可以把url下载到本地,如果想按自己指定的方式输出需要自己,通过File文件实现本地保存数据)(底层---两个作用---提取URL和去重,我们可以把要加的url放到缓存池中,但底层实现的时候会先对url通过concurrenthashmap进行去重放到set集合中,提取urls这些不重复的地址是存放在LinkBlockingQueue的阻塞队列中)
  • Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等(我暂时没用它,它可以把数据持久保存)(底层----实现Pipeline接口,我们可以通过该方法传入的参数,获取我们想要到信息,把参数可以传入进自己写的方法,然后通过File可以保存到本地,也可以通过数据库把信息持久化保存起来)

xpath的相关用法

String contents = page.getHtml().xpath("//*[@id=\"article\"]/p/text()").all().toString();

css的用法

List<String> detailUrlList = page.getHtml().css(list_css_url).links().all();

正则的用法

String match_url = "http://roll\.mil\.news\.sina\.com\.cn/col/zgjq/\w+\.shtml";

page.getUrl().regex(match_url).match();

对于列表页--我们把页面中要用的链接加到下面方法中,为了在详情页获取想要的内容,做铺垫。

page.addTargetRequests(detailUrlList);

spider-------启动爬虫    方法选择性用根据情况来定

// 启动爬虫
        Spider.create(new TargetContent())
                // 添加初始化的URL
                .addUrl("http://roll.mil.news.sina.com.cn/col/zgjq/index_1.shtml")
                .scheduler(new FileCacheQueueScheduler("E:\\webmagic\\message"))        
               // 启动10个线程
                .thread(10)
                // 运行
                .run();
        endTime = System.currentTimeMillis();
        System.out.println("爬取结束,耗时约" + ((endTime - startTime) / 1000) + "秒,抓取了" + count + "条记录");

site 相关编码  时间间隔 重试次数等

/**
	 * 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等
	 */
	private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

注意点:

使用css() 方式时操作分页时  ----存在硬编码(到最后一页时,结构不一样的话,就会找不到)

使用regex() 方法时  -----没有输出结果时,要多检查正则是否有问题

对于规则url截取时,多用spilt()会很方便

对于不能直接找到内容的页面----我们要区分列表页 和  详情页     if-else 判断就行

webmagic  ----xpath  不支持 //ul[1]
            不支持同一类型的多个请求一起List<request>
            只能单个单个写 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值