神箭手云爬虫初体验
标签(空格分隔): 爬虫
在一起实习的朋友推荐下尝试了一下神箭手云爬虫,感觉相当不错。首先自带函数虽然简陋,但是对于爬虫而言也算够用。导出excel功能对于我而言算是体贴。最最良心的是自带代理而且是可更换的,这个用爬虫的人都知道是多么良心了吧。
我用神箭手写了一个reddit的Asiancult标签的美女图爬虫,原理虽然简单,但是也跳了一些小坑。与大家分享,希望大家不要重蹈我的覆辙。
照例先贴代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| var configs = { enableProxy: true, domains: ["www.reddit.com"], scanUrls: ['https://www.reddit.com/r/AsianCuties/'], contentUrlRegexes: ["https://www\\.reddit\\.com/r/AsianCuties/.*?"], helperUrlRegexes: [""], fields: [ { name: "title", selector: "//a[@class='title may-blank outbound']/@href", required: true, repeated: true } ] }; configs.beforeCrawl = function(site) { site.addHeader("Referer", "https://www.reddit.com/r/AsianCutiesl"); }; configs.afterDownloadPage = function(page, site) { var regex = /count=[0-9]{1,4}&after=t3_[0-9a-zA-Z]{1,8}/g; var urls = []; var content = page.raw ; urls = 'https://www.reddit.com/r/AsianCuties/?'+content.match(regex); site.addUrl(urls); console.log(urls); return page; }; configs.onChangeProxy = function(site) { site.addHeader("Referer", "https://www.reddit.com/r/") }; var crawler = new Crawler(configs); crawler.start();
|
其实代码结构还是比较简单的。就说下我碰到的几个坑吧。
- contentUrlRegexes是抓取的内容也,这个正则一定要写对啊,我一开始就是没写对,搞到网页下载下来就是不做解析。
- afterDownloadPage。如果你也是和我一样,下一条网址是需要通过解析页面来获取的,那么请务必使用这个函数。我使用onProcessScanPage并没有生效,还有一个就是一定要return page而不是return false,因为这里返回的内容是交给爬虫来提取你要抓取的内容的。
总得来说reddit的抓取还是相对简单的,没有做到什么比较惊艳的东西。