shell 中使用 curl 抓取无限循环问题

2018-11-06 23:14:37 +08:00
 qsbaq

本人不才写了一个 WordPress 得采集插件 wp-jpost,这边遇到一些问题烦请大佬指点。

我们抓取得内容现在是通过浏览器的跳转实现的,这样的话好处就是不会导致内存溢出之类的问题。缺点就是速度慢依赖浏览器,所以我们这里想弄一个脚本。如果直接写 php 脚本采集内容一多会内存溢出所以这里不考虑。所以看看能否在 curl 中跟随链接来循环访问页面来实现。

每个采集的 html 中使用了 meta 进行了跳转,如:

<meta content="8; url='http://127.0.0.1/jpost/?jtask=webhtm&jpage=22'" http-equiv="refresh">

然后这边需要很多次循环,这边我们如何使用 shell 或者 curl 如何才能循环跟随这个地址去访问页面呢。

如果我们使用 php 再显示 html 中使用 header302,然后 header("Location:网址"); 这样可以使用 curl -L。,但是这样的话可能会导致页面内容无法执行,而直接跳转。

求大佬指点一下。

2516 次点击
所在节点    问与答
11 条回复
l12ab
2018-11-06 23:30:12 +08:00
前两天我正好也有这个需求,供参考。

```
<?php
echo "run";
exit(1); //用 exit 返回状态

?>
```

windows

```
@echo off
cls
:start
php index.php
if %errorlevel%==1 goto exceptionEnd
goto start

:exceptionEnd
echo 结束
pause
```

linux
```
while [ 1 -eq 1 ]
do
php abc.php
set last_code=$?
if [ $last_code -ne 1 ];then
echo "task error error_code: "$last_code
break
fi
done
```
gstqc
2018-11-06 23:31:21 +08:00
虽然表达清楚了,但看起来真的很累。



我们抓取得内容现在是通过浏览器的跳转实现的,这样的话好处就是不会导致内存溢出之类的问题。

这里有因果关系吗?


如果直接写 php 脚本采集内容一多会内存溢出所以这里不考虑。

这是代码有问题啊。



为何要用 shell 这么弱的语言做这种事?
我觉得,你用 PHP 处理不了,改用 shell 明显更难。
不如看下怎么解决 PHP 的内存问题。
qsbaq
2018-11-07 10:01:18 +08:00
@gstqc 考虑到大部分站长都是小内存鸡吧,比如 512MB 内存,1G 内存。这样的脚本跑 2-3 个小时可以么亲。
NjcyNzMzNDQ3
2018-11-07 10:20:40 +08:00
内存溢出?
NjcyNzMzNDQ3
2018-11-07 10:21:40 +08:00
是不是没 curl_close 啊
qsbaq
2018-11-07 10:29:18 +08:00
@NjcyNzMzNDQ3 用的是 snoopy,所有的参数变量我都有 unset,destory
NjcyNzMzNDQ3
2018-11-07 10:54:40 +08:00
@qsbaq 几年前的东西了,推荐 gayhub 上找个 xpath 的轮子吧
qsbaq
2018-11-07 11:00:44 +08:00
@NjcyNzMzNDQ3 还望大佬详细说明
gstqc
2018-11-07 11:01:05 +08:00
@qsbaq 看你怎么用了。
如果抓回来的内容都保存在内存,时间久了肯定会爆。
把内容落地到磁盘就行了。

就好比如,你一台 512M 内存的机器,怎么下载一个 20G 的文件?当然只能边下边写磁盘。
NjcyNzMzNDQ3
2018-11-07 11:14:24 +08:00
@gstqc 跑题了,你是想解决内存溢出。
xpath 就一工具,抓数据比正则舒服,所以推荐你以后可以试试。
qsbaq
2018-11-07 11:17:40 +08:00
@gstqc 这边是直接入库到 WordPress 数据库里的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/505187

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX