wslsq
V2EX  ›  PHP

请教大家关于 php 爬取内容的问题~

  •  
  •   wslsq · Sep 18, 2016 · 2903 views
    This topic created in 3701 days ago, the information mentioned may be changed or developed.
    我有个项目需要每十秒爬取一个内容,不能手动刷新, php 好像没有定时功能的吧!?

    我朋友说用长链接可以,然后我去了解了一下长链接。

    看了一下,长链接好像是用来搞通讯的吧。。长链接爬取可以吗?

    还请各位大神指点一二,谢谢~
    11 replies  •  2016-09-20 11:19:26 +08:00
    nigelvon
    nigelvon
    Sep 18, 2016
    1
    定时? crontab 或者 sleep+while(true) 都行
    ic2y
    ic2y
    Sep 18, 2016
    2
    crontab 。设定为每 1 分钟启动一次脚本,然后, while 循环 6 次。每次开始爬的时候,记下 start_time ,爬完,记下 end_time,然后 sleep(10-(end_time - start_time))
    initpub
    initpub
    Sep 18, 2016
    3
    楼上说得对: crontab + sleep 是可以搞定的,而且最简单。

    你的朋友也没错,长链接也行。就是“ keep-alive ”啦,但是这个复杂点,没有必要。优点是速度快一些。
    jerryjee
    jerryjee
    Sep 18, 2016
    4
    crontab 定期执行 PHP 脚本最简单
    bombless
    bombless
    Sep 18, 2016
    5
    也不一定 crontab ,你就 nohup 让一个 PHP 脚本一直跑就好,每次 sleep 十秒
    wslsq
    wslsq
    OP
    Sep 18, 2016
    6
    @bombless
    @jerryjee
    @initpub
    @ic2y
    @nigelvon
    谢谢大家,定时我懂得,只是希望有长链接之类更优方法。谢谢了。
    initpub
    initpub
    Sep 18, 2016
    7
    @wslsq 我晕,你对时间的要求是“每十秒爬取一个内容”——根本不需要“更优方法”哦。
    dawniii
    dawniii
    Sep 18, 2016
    8
    不清楚具体需求是啥样。
    我理解为 你有一个页面 页面的某些内容需要每十秒 从别的地方抓过来?
    方案 1 : js 定时 ajax 去请求你的 php 程序拿数据就 OK 了
    方案 2 : php 建立 websocket server 。浏览器建立长连接, js 定时发请求拿数据。
    如果你的需求只是定时抓内容, php 脚本直接循环 sleep(10)就 OK 了
    wslsq
    wslsq
    OP
    Sep 19, 2016
    9
    @dawniii 感谢~
    可能是我说的不明白~
    自动刷新的问题已经解决了
    主要是想用长连接爬取,因为长链接不会产生多次请求。多次请求怕会被封。
    zktz
    zktz
    Sep 20, 2016 via Android
    10
    长连接不是你说的这个层面的事吧。你每隔 10 秒取一次数据,你对目标每隔 10 秒重新读取一次,对方就能记录一次,该封一样封。
    wslsq
    wslsq
    OP
    Sep 20, 2016
    11
    @zktz 谢谢。我的确对长链接不懂。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1855 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 130ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    ♥ Do have faith in what you're doing.