使用webmagic爬取新浪微博热榜

这里没用用新浪微博给的官方api,直接使用webmagic爬取,网页版的有反爬虫策略,爬起来困难,这里爬取的是移动版本。
经过分析微博的请求找到请求进行爬取。
这里写的爬取热榜前30页的数据。

package usable;

import java.util.ArrayList;
import java.util.List;



import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.JsonPathSelector;

public class WeiboHot implements PageProcessor {

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

    public static void main(String[] args) {
        Spider.create(new WeiboHot())
                .addUrl("https://m.weibo.cn/api/container/getIndex?containerid=102803_ctg1_8999_-_ctg1_8999_home")

                .run();
    }
    public Site getSite() {
        return site;
    }
    public void process(Page page) {
        List urls = new ArrayList();
        for (int i = 2; i < 30; i++) {
            urls.add("https://m.weibo.cn/api/container/getIndex?containerid=102803_ctg1_8999_-_ctg1_8999_home&page="
                    + i);

        }

        page.addTargetRequests(urls);
        String pagestring = page.getRawText();
        if (pagestring.length()>100) {

            List links = new ArrayList();
            links = new JsonPathSelector("$.data.cards[*].scheme").selectList(pagestring);

            List username = new ArrayList();


            username = new JsonPathSelector("$.data.cards[*].mblog.user.screen_name").selectList(pagestring);

            List content = new ArrayList();
            content = new JsonPathSelector("$.data.cards[*].mblog.text").selectList(pagestring);
            for (int i = 0; i < links.size(); i++) {
                System.out.println(username.get(i));
                System.out.println(links.get(i));
                System.out.println(content.get(i));
            }
        }
    }



}

这只是简单的例子,没有入库,没有去掉html,提供的是一种思想。
现在可以根据微博用户的id爬取该用户所有的信息,这里就不贴出来了
我记得在11月分的时候爬过孙俪和贾乃亮的微博(全部微博),一个月后李-小-璐-的-贾-乃-亮-了,可惜只是测试,数据也被我删了,口说无凭
我就贴个路径,

迪丽热巴的微博数据

可以去她的微博看看和返回的json数据和微博信息并没有差别,在请求上加上page= 就能翻页了
我做的时候找了很多爬取微博的资料,网上的大部分是申请api进行爬取,好像是基于python的,与项目不兼容,麻烦

这里感谢 黄亿华 大神,开发了webmagic

你可能感兴趣的:(爬虫)