使用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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
