编写油猴插件来爬取女神微博列表

微博H5模式下,可以无限刷微博列表,在这个模式下,编写脚本,把所有的博客列表抓取下来,传送到我们自己的服务器。 以杨幂微博为例。 image.png 我们在H5模式下的console里直接编写我们脚本,这里的网络请求,可以规避相关网站的防爬措施。 image.png 代码 var uid = "1195242865"; function get(link) { return fetch(link).then((res) => res.json()); } async function getList({ page = 5, id, s_id = "", arr = [] }) { if (page <= 0) return arr; page -= 1; const list = await get( `https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&type=uid&value=${uid}&containerid=${id}&since_id=${s_id}` ); const { containerid, since_id } = list.data.cardlistInfo; const ret = list.data.cards .filter((item) => item.card_type === 9) .map((item) => ({ text: item.mblog.raw_text, pics: (item.mblog.pics || []).map((pic) => pic.url), })); return getList({ page, id: containerid, s_id: since_id, arr: [...arr, ...ret], }); } (async () => { try { const config = await get( `https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&type=uid&value=${uid}` ); const id = config.data.tabsInfo.tabs[1].containerid; const ret = await getList({ id }); console.log(ret); } catch (e) { console.log(e); } })(); 代码如上,可以直接拷贝到console里,你将在日志里看到50条杨幂的微博列表和图片。你也可以把这个列表上传给你的接口,存储起来。 介绍下上述脚本的几个参数: page:爬取的总页数,默认是爬取5页,你可以自己更改。 uid:微博给每个用户分配的ID,如果你想爬取其他用户,可以找到该用的uid,进行替换。 爬取到的数据 image.png 游猴插件 根据上面的效果,我们可以编写一个油猴插件,当用户某个用户的微博H5网页时,可以直接输出这个用户所有的微博列表,不需要用户一个个点击下拉复制。 下面复制下我的油猴脚本,感兴趣的可以试用下。 // ==UserScript== // @name weibo_list // @namespace http://tampermonkey.net/ // @version 0.1 // @description 获取微博列表 // @author hanhuizhu // @match https://m.weibo.cn/* // @grant none // ==/UserScript== (function() { 'use strict'; var uid = location.href.match(/\d+/)[0]; function get(link) { return fetch(link).then((res) => res.json()); } async function getList({ page = 5, id, s_id = "", arr = [] }) { if (page <= 0) return arr; page -= 1; const list = await get( `https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&type=uid&value=${uid}&containerid=${id}&since_id=${s_id}` ); const { containerid, since_id } = list.data.cardlistInfo; const ret = list.data.cards .filter((item) => item.card_type === 9) .map((item) => ({ text: item.mblog.raw_text, pics: (item.mblog.pics || []).map((pic) => pic.url), })); return getList({ page, id: containerid, s_id: since_id, arr: [...arr, ...ret], }); } (async () => { try { const config = await get( `https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&type=uid&value=${uid}` ); const id = config.data.tabsInfo.tabs[1].containerid; const ret = await getList({ id }); console.log(ret); } catch (e) { console.log(e); } })(); })(); 安利下油猴 https://greasyfork.org/zh-CN

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):