神箭手云爬虫初体验

标签(空格分隔): 爬虫


在一起实习的朋友推荐下尝试了一下神箭手云爬虫,感觉相当不错。首先自带函数虽然简陋,但是对于爬虫而言也算够用。导出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", //默认使用XPath
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();

其实代码结构还是比较简单的。就说下我碰到的几个坑吧。

  1. contentUrlRegexes是抓取的内容也,这个正则一定要写对啊,我一开始就是没写对,搞到网页下载下来就是不做解析。
  2. afterDownloadPage。如果你也是和我一样,下一条网址是需要通过解析页面来获取的,那么请务必使用这个函数。我使用onProcessScanPage并没有生效,还有一个就是一定要return page而不是return false,因为这里返回的内容是交给爬虫来提取你要抓取的内容的。

总得来说reddit的抓取还是相对简单的,没有做到什么比较惊艳的东西。