火车头之添加文件下载时出错……跳过方法
最近一直在玩采集,奈何太菜了实在是。。这次采集对象是新闻类的文章,有带图片的那种,结果前面采着采着后面就出问题了:对方文章内的图片丢失(404)……
环境&软件
软件:火车头9.8?忘了没记
环境:Windows10 LTSC
简单描述:采集结果——>正常。采集内容——>异常(内容含有对方的图片连接)。标记已采——>是。最终发布——>是。
正文
玩的时间并不长,因此可能会有更好的方案。建立在不考虑手动修改最终采集结果的前提下,这里我仅仅是给出思路、做下笔记,具体代码就不贴了(主要是代码写的自己都看不下去emmmm)……
问题来源
采集对象内容中夹带的图片资源不存在(404),而火车头勾选“下载图片”或者“下载文件”之类的选项,会补全img标签的链接,如原本内容为img src="/upload/20210715/aaaa.jpg"
,那么补全之后就会变成img src="https://对方域名/upload/20210715/aaaa.jpg"
这种形式的。
火车头补全链接
然后当所有内容规则都处理完成后,火车头才会去探测补全后的链接。如果说链接无效,即会提示“添加文件下载时出错……”,采集成功。而当你去查看采集的内容时,你会发现采下来的内容里是包含补全后的链接的,这就失去采集的意义了不是吗?
方案1:http请求+内容过滤?
那有人可能会说,简单,我添加个http请求+内容过滤返回的特定值不就可以达到想要的目的了?
确实是这样没错,但是效率太低了:如果一篇文章中有3张图片,而且这三张都是无效的,那么你就需要至少新增1个标签,同时这个标签首先需要过滤出其中一张图片链接,并最终返回给该标签,从而让添加的http请求选项生效。
而这些操作之后,你会发现内容标签最终还是会去探测、并且探测失败,相当于说,虽然http请求+内容过滤能达到不标记为已采,治标不治本的“伪”操作,但是这相当于整篇文章等于作废了……
方案2:php内容插件
这个就容易许多了,主要思路是:首先提取内容标签的img的src链接,进行补全链接后,curl请求,根据返回的状态码去判断是否正则替换掉整个img标签。
如果报错请注意:
方案3:C#运行代码
这个应该是最容易的(但其实…鬼知道我掉进了多少坑……)。直接在内容标签里,添加运行C#代码,编写相关代码即可。我自己目前在用的是这个,核心和php差不多,但是更加简洁。
主要思路:正则提取img的src链接数组,进行补全链接,循环的方式去http请求src地址,再通过响应,判断返回的状态码为OK、NotFound之类的,去执行删除img标签或者不做处理、原文返回给内容标签。
遇到的坑,以及需要注意的地方:
最后
方案肯定还有很多,也许是便捷的,也许是复杂的,总之选取适合自己的才是最好的吧。个人感觉火车头还是业余爱好、日常学习玩玩还行,真要用于生产环境,还是得Python爬虫之类的来得快一些……