文档章节

用WebMagic爬取淘宝MM的照片,并下载到本地。

Andy.Lin
 Andy.Lin
发布于 2017/02/08 17:17
字数 693
阅读 2179
收藏 1

    作为一个合格的程序员,既然公司没有安排工作,自己也要找事情做。

    最近在看WebMagic的爬虫框架。就在网上找了一些例子来练练手,此示例是网上的,但他用的是python写的,我们这里用的是Java.

    思路:

    根据列表页“https://mm.taobao.com/json/request_top_list.htm?page=1”,爬取淘女郎的详情页,再详情页爬取淘女郎的照片URL地址,再根据URL地址下载图片至本地。

    首先搭建开发环境并下载WebMagic Jar包,这步 WebMagic已经有文档介绍 了:http://webmagic.io/docs/zh/,这步就直接跳过。

        新建一个类,并实现PageProcessor接口,代码如下:

public class TaoBaoMMRepoPageProcessor implements PageProcessor {

    //列表页正则表达式
    private static final String REGEX_PAGE_URL = "https://mm\\.taobao\\.com/json/request_top_list\\.htm\\?page=\\w+";

    // 爬取的列表页,页数。
    private static final int PAGE_SIZE = 100;

    //配置
    private Site site = Site.me();

    //爬取
    public void process(Page page) {
        /**
         * 把所有的列表页都添加到 爬取的目标URL中
         */
        List<String> targetRequests = new ArrayList<String>();
        for (int i = 1;i < PAGE_SIZE; i++){
            targetRequests.add("https://mm.taobao.com/json/request_top_list.htm?page=" + i);
        }
        page.addTargetRequests(targetRequests);
        //用正则匹配是否是列表页
        if (page.getUrl().regex(REGEX_PAGE_URL).match()) {
            /**
             * 如果是,获取 class为 lady-name 的a 标签 的所有链接(详情页)。
             */
            List<String> urls = page.getHtml().xpath("//a[@class=\"lady-name\"]").links().all();
            for (String url:urls) {
                /**
                 * 获取到的详情页链接,是找不到图片的URL,利用Chrome的控制台,发现数据是从https://mm.taobao.com/self/info/model_info_show.htm?user_id=46599595。下发的。
                 * 把URL替换下,添加到爬取的目标URL,中。
                 */
                page.addTargetRequest(url.replace("self/model_card.htm","self/info/model_info_show.htm"));
            }
        } else {
            // 如果不是,则
            // 获取 class为mm-p-info-cell clearfix 的ul /li /span/文本,作为图片保存图片名。
            String nickname = page.getHtml().xpath("//ul[@class=\"mm-p-info-cell clearfix\"]/li/span/text()").toString();
            // 获取 class为mm-p-modelCard 的div /a /img  src 值,此为图片URL.
            String imgUrl = page.getHtml().xpath("//div[@class=\"mm-p-modelCard\"]/a").css("img","src").toString();
            try {
                // 根据图片URL 下载图片方法
                /**
                 * String 图片URL地址
                 * String 图片名称
                 * String 保存路径
                 */
                DownloadImage.download("http:" + imgUrl,nickname + ".jpg","F:\\image\\");
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        //启动
        Spider.create(new TaoBaoMMRepoPageProcessor())
                //添加初始化的URL
                .addUrl("https://mm.taobao.com/json/request_top_list.htm?page=1")
                //启动10个线程
                .thread(10)
                //运行
                .run();
    }
}

     根据 URL地址下载图片方法:

public class DownloadImage {

    public static void download(String urlString, String filename,String savePath) throws Exception {
        // 构造URL
        URL url = new URL(urlString);
        // 打开连接
        URLConnection con = url.openConnection();
        //设置请求超时为5s
        con.setConnectTimeout(5*1000);
        // 输入流
        InputStream is = con.getInputStream();

        // 1K的数据缓冲
        byte[] bs = new byte[1024];
        // 读取到的数据长度
        int len;
        // 输出的文件流
        File sf=new File(savePath);
        if(!sf.exists()){
            sf.mkdirs();
        }
        OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename);
        // 开始读取
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
        }
        // 完毕,关闭所有链接
        os.close();
        is.close();
    }
}

    启动main方法,这时候在我们的电脑就有很多漂亮美女的照片了。

    

 

       

© 著作权归作者所有

Andy.Lin
粉丝 1
博文 4
码字总数 1049
作品 0
厦门
私信 提问
webmagic网络爬虫将爬取到的内容保存到本地文件夹,怎么把本地文件夹路径存到数据库中

使用webmagic爬取数据,将网页标题,作者,评论数,点赞数等存储到数据库中, 将网页具体内容存储到本地文件夹,通过 Spider.create(new StoreXXPage()).addUrl("https://www.oschina.net/b...

Nicll
2018/01/03
158
2
webmagic的设计机制及原理-如何开发一个Java爬虫

此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实...

黄亿华
2013/07/20
0
94
webmagic 0.1.0版本发布,Java垂直爬虫框架

第一个正式版本。 修改了若干API,使得可扩展性更强,重写了Pipeline接口,将抽取结果集包装到ResultItems对象,便于逻辑分离。 增加下载的重试机制,支持gzip,支持自定义UA/cookie。 增加多...

黄亿华
2013/07/25
1K
13
使用webmagic爬取网站数据

版权声明:本文供交流学习,能够帮助到你是我最大的荣幸! https://blog.csdn.net/u014231523/article/details/88934661 爬取网站的技术很多,我是使用java来写,经过对比还是选择了webmagi...

兴国First
03/31
0
0
记一次初学Webmagic的踩坑之旅:爬取知乎数据

好久没更新博客了,最近在做一个知乎的小爬虫 webmagic是一个简单灵活的Java爬虫框架。基于WebMagic,支持多线程爬取,爬取逻辑明确、是一个易维护的爬虫。 官方给出的流程图是像下面这样的:...

语落心生
2018/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

错误代码0x800700c1 VS2019加载项目就闪退

--win10更新错误代码0x800700c1 解决方法:把防火墙什么的关了。然后重启下电脑。在检查更新,最后我把杀毒。卫士什么的卸载了。 退出360安全卫士,重新运行vs2019,成功!!! Windows软件异...

南风末
10分钟前
0
0
免费的编程中文书籍索引

免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版...

TreeZhou0511
24分钟前
1
0
线程池之ThreadPoolExecutor使用

ThreadPoolExecutor提供了四个构造方法: ThreadPoolExecutor构造方法.png 我们以最后一个构造方法(参数最多的那个),对其参数进行解释: public ThreadPoolExecutor(int corePoolSize, /...

天王盖地虎626
42分钟前
1
0
小程序登陆流程

http://www.bubuko.com/infodetail-2592845.html

为何不可1995
51分钟前
1
0
Consul+Spring boot的服务注册和服务注销

一图胜千言 先看一看要做事情,需要在Consul上面实现注册中心的功能,并以2个Spring boot项目分别作为生产者,消费者。 Consul 假设已经完成文章《Consul的开发者模式之Docker版》中的所有的...

亚林瓜子
57分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部