V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wd0g
V2EX  ›  PHP

PHP 如何进行访问很多网页的操作?

  •  
  •   wd0g · 2016-01-16 19:44:05 +08:00 · 3139 次点击
    这是一个创建于 3029 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做类似百度搜索的这种
    因为百度没有开放 API
    所以得自己用 PHP 来爬取结果
    每次爬取 50 页的内容,然后输出给客户
    大概流程是:
    1:用户输入关键字
    2:通过关键字爬取百度 50 页的结果
    3:输出指定结果给用户

    不知道有什么好的方法,能解决速度的问题

    17 条回复    2016-01-24 10:44:35 +08:00
    XianZaiZhuCe
        1
    XianZaiZhuCe  
       2016-01-16 19:45:33 +08:00 via iPhone   ❤️ 1
    百度试试 php 抓取
    function007
        2
    function007  
       2016-01-16 20:10:13 +08:00   ❤️ 1
    stream_socket_client
    JiShuTui
        3
    JiShuTui  
       2016-01-16 20:15:27 +08:00
    百度前两年为了防止 360 等抓取结果,做了很多防抓取措施
    viko16
        4
    viko16  
       2016-01-16 20:19:18 +08:00
    请百度一下怎么爬取百度, 2333
    wizardforcel
        5
    wizardforcel  
       2016-01-16 20:45:01 +08:00
    有啊。以前写基于贴吧的工具的时候,我都是反编译客户端找接口。客户端接口返回的都是 json ,而且不像网页经常改,爽到爆。
    gzlock
        6
    gzlock  
       2016-01-16 21:26:52 +08:00
    @wizardforcel 我会先抓包,抓包失败才去反编译。。。
    wizardforcel
        7
    wizardforcel  
       2016-01-16 21:59:59 +08:00 via Android
    而且为何在百度这棵歪脖树上吊死,换个提供 api 的搜索引擎不就得了。再说百度的结果质量也不是很好。
    lmfx89
        8
    lmfx89  
       2016-01-16 22:07:34 +08:00
    回答题目: php 可以批量访问的,可以 google curl_multi_exec 或者 php curl_multi 都可以。
    jugelizi
        9
    jugelizi  
       2016-01-16 22:11:52 +08:00
    一种是前台 js 发个 50 请求
    还有用多线程扩展来爬
    wd0g
        10
    wd0g  
    OP
       2016-01-17 02:50:26 +08:00
    @JiShuTui
    @viko16
    @wizardforcel
    额,我只是拿百度打个比方,不是真正的爬取百度,哈哈哈
    wd0g
        11
    wd0g  
    OP
       2016-01-17 02:53:34 +08:00
    有可能是我主文写的有问题,我的问题是如何解决 PHP 同时访问 50 个网页速度慢的问题
    chaegumi
        12
    chaegumi  
       2016-01-17 07:37:47 +08:00   ❤️ 1
    wizardforcel
        13
    wizardforcel  
       2016-01-17 10:27:36 +08:00 via Android
    @gzlock oauth 有个校验用的 sign ,抓包破不出来 key 。
    em70
        14
    em70  
       2016-01-17 10:54:29 +08:00 via iPhone   ❤️ 1
    这个问题就好比说如何 1 秒下载 1G 的文件一样,下载慢是因为带宽不行啊,而且单线程每次握手都还需要时间,解决办法是每次只获取一页的,翻页再获取下一页的内容
    wd0g
        15
    wd0g  
    OP
       2016-01-17 14:46:47 +08:00
    @em70 确实,领教了!
    wd0g
        16
    wd0g  
    OP
       2016-01-24 05:22:53 +08:00
    @function007 @gzlock @lmfx89 @jugelizi @chaegumi @wizardforcel @em70
    换了一个思路,我现在是按固定时间频率去访问用户设置的关键字,用户搜索时不是实时查询
    em70
        17
    em70  
       2016-01-24 10:44:35 +08:00 via iPhone
    @wd0g 这个叫反向索引,百度谷歌也是这样做的,不会每次搜索去庞大的库里找,大部分关键字百度每月只更新 2 次,热门关键词频率会高一些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2374 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:25 · PVG 20:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.