V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ydxred
V2EX  ›  程序员

PHP 写一个爬虫(v 友注意详细看正文详情)

  •  
  •   ydxred ·
    ydxred · Mar 15, 2017 · 4358 views
    This topic created in 3331 days ago, the information mentioned may be changed or developed.

    接到一个任务要我写一个爬虫!可是我暂时只会 php,但是 php 写爬虫不是强项!v 友有用 php 写过爬虫的吗?有个开源项目推荐借鉴参考一下!或者说我现在去学习 python 星期五能完成好一个爬虫吗!爬出来的数据要写进数据储存的!谢谢了

    35 replies    2017-03-16 10:30:23 +08:00
    golmic
        1
    golmic  
       Mar 15, 2017 via Android
    有偿提供 python 爬虫解决方案
    cha1
        2
    cha1  
       Mar 15, 2017
    gouchaoer 同学的爬虫经验分享: https://www.v2ex.com/t/324309

    另外可以看下这个: https://github.com/owner888/phpspider
    slince
        3
    slince  
       Mar 15, 2017
    https://github.com/slince/spider 确实不是强项,单线程爬的
    shoaly
        4
    shoaly  
       Mar 15, 2017
    假设你 php 基本功 已经会数据库了 也会发出 get, post 请求 获取 response
    那么你离 爬虫只差了一个 正则的距离
    lecher
        5
    lecher  
       Mar 15, 2017
    任何语言只要能发网络请求都可以写爬虫。
    python 爬虫通常是用增强库,用来帮助解析网页数据。
    php 写爬虫通常是用 curl 库+re 正则解析,可以借助 curl 的库做很多参数设置, header cookie 之类的。抽取数据是靠正则来做解析。需要自己写任务管理。
    如果爬虫是强嵌入原有业务的,比如需要取很多业务数据做检测,那就用 php 继续写爬虫,封装一个 curl 的处理接口,然后写一个多进程任务管理,要用到命令行的库,通常要借助 mysql 、 redis 之类的做进程间数据同步。

    如果仅仅只是为了一次性抓取数据, python 上手也很快,一周绰绰有余。
    jarlyyn
        6
    jarlyyn  
       Mar 15, 2017   ❤️ 1
    ydxred
        7
    ydxred  
    OP
       Mar 15, 2017
    @lecher 大神,python 基本语法会啊!周五交能赶上吗? 今天周三了
    icemanpro
        8
    icemanpro  
       Mar 15, 2017
    火车采集
    pubby
        9
    pubby  
       Mar 15, 2017 via Android
    一直用 php 爬,按功能分开写(目标网址预处理,抓取,分析....),用队列。多开几个抓取进程同样可以跑满带宽。
    fuxkcsdn
        10
    fuxkcsdn  
       Mar 15, 2017
    前提是你要爬什么?目标网站限制爬虫吗?如何限制

    BTW , PHP 写爬虫效率不比 python 差

    有偿提供 PHP 爬虫方案 XD
    Felldeadbird
        11
    Felldeadbird  
       Mar 15, 2017   ❤️ 2
    jquery 会吧。用这个库,分分钟教你做人。 https://querylist.cc/
    keller
        12
    keller  
       Mar 15, 2017
    你需要的可能是火车头采集器
    FYK
        13
    FYK  
       Mar 15, 2017
    同 2 楼, phpspider
    exalex
        14
    exalex  
       Mar 15, 2017
    @pubby 有博客嘛
    exalex
        15
    exalex  
       Mar 15, 2017
    @fuxkcsdn 有偿是多少钱
    cdwyd
        16
    cdwyd  
       Mar 15, 2017 via Android
    同有偿,二楼优先😁
    价格看复杂程度,平价接单
    silov
        17
    silov  
       Mar 15, 2017
    分两步,第一步抓取: Snoopy.class.php
    第二步解析内容: Simple Html Dom

    两个关键词直接百度就可以把工具类拿来用了,挺简单的。
    sxm
        18
    sxm  
       Mar 15, 2017
    简单的就是 curl 获取页面内容,然后就是写正则提取需要的数据了。

    之前某论坛要关闭,我是花了 2 个夜晚写了 PHP 抓取程序把那个论坛的数据都抓下来了并入库。因为单进程抓取速度太慢,又写了个多进程页面管理,前端页面能实时查看各个进程的抓取速度,开新进程或者结束指定进程等等。
    curl 获取页面, redis 做队列, access 做数据库(喜欢单个文件数据库,小巧方便带走)
    lijinma
        19
    lijinma  
       Mar 15, 2017
    这帮人,每人推荐个靠谱的。。
    lijinma
        20
    lijinma  
       Mar 15, 2017
    我来推荐个靠谱简单的 https://github.com/FriendsOfPHP/Goutte
    scnace
        21
    scnace  
       Mar 15, 2017 via Android
    任何语言的爬虫的实践都差不多吧。 http get/post + 分析 request header +DOM selector/XPath/正则(这是基础的
    再上去就是集成啥 headless browser /proxypool/分布式调度啥的了
    Moker
        22
    Moker  
       Mar 15, 2017
    我现在也是 PHP 写爬虫 还行 在 PHPQUERY 解析
    bonfy
        23
    bonfy  
       Mar 15, 2017 via iPhone
    同有偿 楼上的都优先
    ydxred
        24
    ydxred  
    OP
       Mar 15, 2017
    @sxm 能不用 redis 吗?
    mrcn
        25
    mrcn  
       Mar 15, 2017
    我记得有个库叫 PHPQUERY
    很好用,类似 jQuery 一样直接用选择器就好
    不过 PHP 的多线程……
    appppap
        26
    appppap  
       Mar 15, 2017 via iPhone
    有偿约炮
    benbenlang
        27
    benbenlang  
       Mar 15, 2017
    楼主能帮忙给我爬几个用户 ID 吗?
    sxm
        28
    sxm  
       Mar 15, 2017   ❤️ 1
    @ydxred 我用 redis 作用是做队列,先把要抓取的页面 ID 全部 push 进去,然后抓取页面就从 redis 里 pop 一个页面 ID 出来去抓取,所以多运行几个 php 页面就能提升抓取速度,相当于多进程模仿多线程。本来是不用 redis 的,因为 access 并发读取修改的问题,用文件锁都锁不住。
    tammy
        29
    tammy  
       Mar 15, 2017 via iPad
    @lecher PHP 写爬虫感觉没比 shell 方便多少
    uzumaki
        30
    uzumaki  
       Mar 15, 2017 via Android
    不采集 https 的话 其实 dedecms 就行啊
    HanSonJ
        31
    HanSonJ  
       Mar 15, 2017
    guzzle + domcrawler
    lecher
        32
    lecher  
       Mar 15, 2017 via Android
    @tammy 我个人感觉是,如果原来的业务用什么语言,需要抓取数据的时候,就看是不是特别嵌入原来的业务,需要特别频繁调用原有数据做检测的,那就用原来项目的语言,可以很方便的复用原有项目的代码做检测和插入数据。

    爬虫这类的业务可大可小,用什么脚本语言写,性能都不会有特别明显的差距,主要还是看工程规范,用什么语言写全看团队成员的技术栈。

    我个人比较喜欢 curl 库+v8 库+正则的方案。 curl 库解决 header cookies https 的各种问题, v8 解决某些 js 加密的问题。正则解决抽取数据的问题。 CPU 和内存消耗都比较低。

    然而实际上如果只考虑一个语言的话, nodejs 解决所有问题。
    pheyer
        33
    pheyer  
       Mar 15, 2017
    看看这个 PHPSpider : https://doc.phpspider.org/
    figofuture
        34
    figofuture  
       Mar 16, 2017
    看看这篇文章,分分钟搞定一个爬虫程序 https://www.figotan.org/2016/08/10/pyspider-as-a-web-crawler-system/
    MiguelValentine
        35
    MiguelValentine  
       Mar 16, 2017
    周五, py ,来得及
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5967 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 02:03 · PVG 10:03 · LAX 19:03 · JFK 22:03
    ♥ Do have faith in what you're doing.