原文博客: 羞羞的node爬虫css
学了一阵子node
,除了用 express
写东西,就没怎么作过东西
忽然就想写个 爬虫 来玩一玩,并且仍是爬一些羞羞的东西html
SuperAgent 是个 http 方面的库,能够发起 get 或 post 请求。
cheerio 你们能够理解成一个 Node.js 版的 jquery,用来从网页中以 css selector 取数据,使用方式跟 jquery 同样同样的
fs 用于读写文件的一个依赖包
superagent-logger 用来打印http请求信息node
首先,咱们要爬取得网址是 : http://www.hacg.wiki/wp/anime...
其次,咱们要爬取得目标: 以如下格式保存在 txt
中jquery
再其次,分析咱们要爬取的内容分布 : 打开控制台git
title, id, tags 以下
爬取地址是: "http://www.hacg.wiki/wp/anime.html/page/" + igithub
time, seed 以下
爬取地址是: 'http://www.hacg.wiki/wp/' + id + '.html'正则表达式
再再其次,咱们能够从上面看出,要爬 time 和 seed 前提是把前边的 id 爬取到,
所以要先爬取 id ,再利用 id 拼凑 seed 所在的 urlexpress
最后, 就能够来愉快地爬取了npm
仍是有复习到一些知识
具体superagent
,cheerio
看上面我提供的 api模块文档连接api
当我第一次按正常同步思惟用 superagent
先爬取 id 所在 url,
再调用下面使用 superagent
的函数获取 seed时,
我发现获取的 seed
一直是空的。
后来才意识到这是异步函数,不会按顺序进行。
所以我使用了 ES6
的 promise
控制先执行 爬取 id
爬取完 id 再爬取 seed
若是你有逛过该网站,你会发现他的 seed 是放得毫无规律的,
并非存放在一个固定的 x标签 中,
所以个人作法是 把存放 seed 的整一个 $('.entry-content')
获取到,
再利用正则表达式整块文本进行匹配获取
神坑啊神坑,小问题费了我好长时间
一开始我觉得 磁力连接 这玩意长度为 40 ,都是 大写字母 + 数字 的组合。
后来在爬取不到 seed ,让我一度怀疑人生的时候
巧合下,发现 磁力连接 有 小写字母,有 32长度 的,有 42长度 的。。
我一直觉得是 重定向 问题, 哎,花了好几个钟在这上面纠结
不过也让我小小得从新了解了下 http
结果爬取行数有: 2700行、
爬取seed数: 450
github: llss-crawler
具体注释都在代码里,有须要的小伙伴能够去 github 下下来,跑一下
感觉有趣的爬虫,但愿不吝惜地给个star?
第一次写爬虫,感受颇有趣,一个很自动化,一种互联网啥都 get 获得的感受?(纯洁)