神箭手开发相关常见问题

Q: 如何在代码中停止应用

调用system.exit(),便可以停止应用,同时可以打印消息到日志

Q: 为什么通过XPath Helper验证的xpath, 在爬虫代码中运行取不到数据

一般是因为该xpath抽取的数据是js渲染生成的,可以通过查看网页源代码中是否有该数据进行验证。如果是js渲染的,可以在代码中开启自动js渲染或者通过异步请求获取数据

Q: 代码中使用了全局变量, 爬取到的数据有问题

神箭手不建议在爬虫代码中使用全局变量。因为当爬虫使用多节点运行的时候,每个爬虫节点都会单独使用定义的全局变量,很容易出现冲突,可能导致爬取到的数据出现问题

Q: 在爬虫的回调函数里给一个field重新赋值, 爬取结果里该field为空, 是什么原因

一般是因为数据类型不一致导致的,比如field定义是数组,但是赋值成了字符串。所以如果要在回调函数里重新赋值,请确保前后数据类型要一致

Q: 什么时候需要将爬取到的时间字符串转换成Unix时间戳

当发布数据到CMS网站时,需要使用神箭手提供的发布插件,发布插件对发布时间有特殊要求,需要使用Unix10位时间戳格式。所以如果爬取的数据要发布到CMS网站时,需要将时间字符串转换成时间戳,可以调用神箭手提供的parseDateTime函数

Q: 我想按某个分类或关键字爬取数据, 为什么会爬到其他分类或关键字的

爬取到的数据不够精准,说明设置的contentUrlRegexeshelperUrlRegexes正则表达式有问题,匹配了其他分类或关键字的列表页或内容页。这种情况建议关闭自动发现链接,使用手动发布链接的方式,确保不处理到不需要的链接。点此查看具体教程

Q: 为什么我爬取的网页数据中有很多无用html标签, 怎么处理

爬取的数据中包含无用html标签,说明抽取数据的XPath或者正则不够精确,抽取的数据包含了不需要的内容。 如果无法通过优化XPath或正则表达式来解决,可以参考《如何去掉网页中的广告》

Q: 如何爬取登录后才显示的页面

要爬取登录后的网页,必须先登录网站。神箭手提拱了模拟登录功能, 有两种方式:一种是使用通用模拟登录接口,另一种是通过发送HTTP请求来实现模拟登录,详情请参考《如何实现模拟登录》

成功登录后,神箭手会自动保存cookie,方便爬取数据

Q: 如何爬取有JS异步请求的网页

请参考《如何爬取JS动态生成的数据》

Q: 爬取文章或者商品数据时, 有多页评论, 如何爬取

请参考《如何爬取文章或商品中的评论》