webmagic结合seimiagent实现动态信息页面的采集

本文介绍如何使用webmagic配合seimiagent来采集动态加载的网页信息,以大连链家网为例,说明seimiagent在动态页面抓取中的应用,以及在使用过程中遇到的性能、集群支持和请求方式等问题,并给出了解决方案。
摘要由CSDN通过智能技术生成

webmagic结合seimiagent实现动态信息页面的采集

简介

webmagic是一个非常流行的已api方式采集网页信息的项目,但是对于动态加载的信息不能很好的支持,而目前大多数网页都或多或少的采用了动态加载方式展示页面信息。

目前webmagic已经有了一个解决方案–webmagic-selenium,采用了自动测试工具selenium为支撑的方式采集,但是笔者发现了另外一个开源项目也能很好的实现这个功能。

存在的问题(坑)

1 seimiagent性能较差,建议对一次采集非动态页面采用原始采集方法,动态页面通过seimiagent采集。

2 seimiagent暂时好像不支持集群的方式(没有详细测试),如果大规模采集可能会遇到技术瓶颈

3 seimiagent只支持post请求,解析HTML页面分析链接时候比较麻烦。

网页分析

以大连链家网为例(http://dl.lianjia.com/ershoufang/rs/),页面下部的翻页按钮都是通过动态加载方式得到的。

虽然我们在浏览器上是能够看到翻页按钮的但是,这部分按钮是执行js后生成,webmagic是不会执行js的,所以在webmagic看来这个网页就是js和html代码并不包含分页按钮部分。

动态加载

通过下面的程序可以查看webmagic得到的html代码

package us.codecraft.webmagic.samples;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;


/**
 * 大连链家网数据采集
 * http://dl.lianjia.com/ershoufang/rs/
 * Created by hp on 2016/12/14.
 */
public class LianjiaDLPageProcessor implements PageProcessor {
   
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
    @Override
    public void process(Page page) {
        System.out.println( page.getHtml().toString());
    }
    @Override
    public Site getSite() {
        return site;
    }
    public static 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值