V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wyan453351466
V2EX  ›  程序员

分享一个自己用 PHP 写的豆瓣妹子图爬虫,每日更新!

  •  1
     
  •   wyan453351466 · 2017-07-22 16:44:44 +08:00 · 13673 次点击
    这是一个创建于 2710 天前的主题,其中的信息可能已经有所发展或是发生改变。

    访问地址:

    http://www.yanshuo.me/r/18douban

    感觉 PHP 的爬虫并没有比 Python 差多少啊?异步并发爬取、dom 解析什么的 PHP 做起来都毫无压力的好嘛!

    下面贴一下代码,自己封装的一个小的爬虫‘框架’(应该还称不上是框架吧,哈哈)。其实核心主要还是基于两个 composer 包,guzzlehttp/guzzle 和 symfony/dom-crawler。自己在应用层面做了一下封装,比如记录日志、断点续爬、失败请求重试、过滤重复请求、404 页面加入 URL 黑名单。

    第 1 条附言  ·  2017-07-23 20:19:05 +08:00
    看到大家对开源的呼声比较高。我会在之后的一段时间内抽时间整理下代码,然后把这个爬虫框架开源的。

    感兴趣的朋友可以加群:566806792。如果框架发布会第一时间通知大家,而且会在群里不定期发放言说邀请码。

    对爬虫技术感兴趣的同学欢迎加入!
    91 条回复    2017-08-16 19:42:23 +08:00
    lzhr
        1
    lzhr  
       2017-07-22 17:06:28 +08:00
    你是从哪里知道的这些小组
    duola
        2
    duola  
       2017-07-22 17:12:56 +08:00
    @lzhr 老湿司,路子多。
    hizoubin
        3
    hizoubin  
       2017-07-22 17:13:22 +08:00
    666
    wyan453351466
        4
    wyan453351466  
    OP
       2017-07-22 17:14:31 +08:00
    @lzhr 很简单啊。。你只要找到一个大尺度妹子图小组,比如“女神大本营”。然后不断地点右侧的相关小组就 OK 了。。。可以一直延伸出 N 多的相关小组。。
    akira
        5
    akira  
       2017-07-22 17:17:15 +08:00
    好像有图片是重复的
    littleylv
        6
    littleylv  
       2017-07-22 17:19:29 +08:00
    老司机。。。
    hemoely
        7
    hemoely  
       2017-07-22 17:19:31 +08:00 via Android
    老司机以后维护吗
    wyan453351466
        8
    wyan453351466  
    OP
       2017-07-22 17:25:34 +08:00
    @hemoely 这是长期维护的项目。提供刚给广大程序员的福利哈
    wyan453351466
        9
    wyan453351466  
    OP
       2017-07-22 17:27:45 +08:00
    @akira 对,这是因为有的妹子在不同的小组发了相同的帖子。然后我这边爬取到就重复了。。标题和链接无法区分,这种应该只能通过图片相似度来判定重复了。

    还没有查询相关的资料> <
    xx19941215
        10
    xx19941215  
       2017-07-22 17:36:43 +08:00
    求露珠代码学习一下啊
    ek66
        11
    ek66  
       2017-07-22 17:37:29 +08:00 via Android
    请不要害羞ᕦ(ò_óˇ)ᕤ
    imcocc
        12
    imcocc  
       2017-07-22 17:47:14 +08:00 via Android
    我们不学习你的代码,我们学习你找图的姿势(ง ˙o˙)ว
    potatowish
        13
    potatowish  
       2017-07-22 17:56:39 +08:00
    单身?
    wyan453351466
        14
    wyan453351466  
    OP
       2017-07-22 18:55:39 +08:00 via iPhone
    @xx19941215 以后我会抽个时间整理一下代码,出一份文档。到时候开源出来哈
    wyan453351466
        15
    wyan453351466  
    OP
       2017-07-22 18:56:20 +08:00 via iPhone
    @imcocc 😝
    wyan453351466
        16
    wyan453351466  
    OP
       2017-07-22 18:56:40 +08:00 via iPhone
    @potatowish 嗯,身份暴露了。。。
    jago
        17
    jago  
       2017-07-22 18:57:43 +08:00 via Android   ❤️ 1
    我也爬过,请不要害羞(⊙_⊙)
    wyan453351466
        18
    wyan453351466  
    OP
       2017-07-22 19:04:00 +08:00 via iPhone
    @jago 哈哈,老司机都懂!
    ex44559
        19
    ex44559  
       2017-07-22 19:23:18 +08:00
    我简直忍不住说一句:干得漂亮~
    zhucha
        20
    zhucha  
       2017-07-22 19:57:54 +08:00
    请问哪儿有言说邀请码呢?
    taby
        21
    taby  
       2017-07-22 20:08:42 +08:00
    屌了
    fhefh
        22
    fhefh  
       2017-07-22 20:26:30 +08:00
    我找了半天 github 地址
    maypu
        23
    maypu  
       2017-07-22 20:42:05 +08:00 via Android
    有重复的
    chengfu
        24
    chengfu  
       2017-07-22 20:55:57 +08:00 via iPhone
    这是我看各种发网站其中网站看得最久的一次,干得漂亮~
    wyan453351466
        25
    wyan453351466  
    OP
       2017-07-22 20:59:49 +08:00 via iPhone
    @chengfu 谢谢!
    wyan453351466
        26
    wyan453351466  
    OP
       2017-07-22 21:01:02 +08:00 via iPhone
    @zhucha 邀请码过段时间我会发布的哈,网站还有一些功能没做好!
    wyan453351466
        27
    wyan453351466  
    OP
       2017-07-22 21:47:20 +08:00 via iPhone
    @maypu 对的。这个问题是因为有的妹子在不同的小组发了相同的帖子。。。所以爬取到就重复了,后面会想办法解决!
    tgxh
        28
    tgxh  
       2017-07-22 22:34:38 +08:00 via Android
    我用 node 爬请不要害羞动不动被封 ip
    HYSS
        29
    HYSS  
       2017-07-22 22:36:58 +08:00
    不怕涉黄?
    wenzhoou
        30
    wenzhoou  
       2017-07-22 22:39:14 +08:00 via Android
    @wyan453351466 简单计算 md5 码。如果一样就不用了。或者 2 进制比较,相似度超过 80%就舍弃
    ericgui
        31
    ericgui  
       2017-07-22 22:40:21 +08:00
    代码的 GitHub 地址呢?
    fuxkcsdn
        32
    fuxkcsdn  
       2017-07-22 22:42:23 +08:00 via iPhone
    python 主要有成熟的分布式爬虫框架可用,bs 解析 html 也容易上手,速度也快(至少和 php 的类似程序对比,那快多了)
    guzzle 个人感觉比 requests 好用多了(速度上没做过对比)
    natforum
        33
    natforum  
       2017-07-22 22:43:52 +08:00
    汤不热比这多,质量杠杆的
    wyan453351466
        34
    wyan453351466  
    OP
       2017-07-22 22:47:21 +08:00 via iPhone
    @HYSS 这种不算涉黄吧😓 又没有露点什么的。露点的内容程序会同步豆瓣原贴删除的
    wyan453351466
        35
    wyan453351466  
    OP
       2017-07-22 22:52:23 +08:00 via iPhone
    @fuxkcsdn 解析 HTML 上效率没有对比过,但是功能上 php 中 dom-crawler 的功能和 python 的一些包是一样的,都支持 css-selector 和 xpath。guzzle 的功能很强大,各种情况都考虑进去了,header、cookies 就不用说了,并发爬取也封装的很好的。一般来说爬取瓶颈都在目标网站是否有反爬虫机制,如果没有,开 100 个线程并发爬取速度超快的 (•͈˽•͈)
    wyan453351466
        36
    wyan453351466  
    OP
       2017-07-22 22:53:40 +08:00 via iPhone
    @wenzhoou 嗯,主要是需要对比图片相似度。标题妹子们起的都不一样。。。
    HYSS
        37
    HYSS  
       2017-07-22 22:55:48 +08:00
    @wyan453351466 你的网站好像不错呢 用的开源的?还是自己的?
    wyan453351466
        38
    wyan453351466  
    OP
       2017-07-22 22:56:09 +08:00 via iPhone
    @ericgui 代码暂时还没有开源!因为目前还是紧密结合在我自己的项目里。过段时间我会抽离出来单独封装成一个框架,分享给大家。还有也得写一份简易的文档。。
    wyan453351466
        39
    wyan453351466  
    OP
       2017-07-22 22:57:32 +08:00 via iPhone
    @HYSS 网站程序是自己写的,所以还有一些功能没做好。。现在正在开发呢。比如评论、通知之类的功能。。
    magensky
        40
    magensky  
       2017-07-22 23:19:32 +08:00 via iPhone
    其他栏目的热点信息是按照什么标准抓取的?
    wyan453351466
        41
    wyan453351466  
    OP
       2017-07-22 23:21:24 +08:00 via iPhone
    @tgxh 是会被封 ip 的。我这边也是通过控制爬取频率来解决这个问题的。。每 2 秒钟爬取一个页面。。速度超慢吧?不过还好一个小时可以爬 1000 多个页面了。
    wyan453351466
        42
    wyan453351466  
    OP
       2017-07-22 23:23:05 +08:00 via iPhone
    @magensky 按照内容在原网站被喜欢 /赞的数量来评分、爬取的
    xyx119
        43
    xyx119  
       2017-07-22 23:35:40 +08:00
    你这个网站看图太累了,手都给老子点麻了。。。
    linhaijian
        44
    linhaijian  
       2017-07-22 23:38:46 +08:00
    老司机求带,坐等开源
    wyan453351466
        45
    wyan453351466  
    OP
       2017-07-22 23:53:36 +08:00 via iPhone
    @xyx119 现在确实图片浏览体验不太好。。后期会增加图片浏览模式的
    sobigfish
        46
    sobigfish  
       2017-07-22 23:53:59 +08:00
    应该更深度一点,-。-
    机器学习打 tag ;
    去重复的;
    脸部识别什么的
    wyan453351466
        47
    wyan453351466  
    OP
       2017-07-22 23:55:11 +08:00 via iPhone
    @sobigfish 哈哈,是的。现在就没那么智能了,纯粹是根据不同的数据源,还有关键词匹配来打 tag 的
    sobigfish
        48
    sobigfish  
       2017-07-23 00:04:16 +08:00
    eyp82
        49
    eyp82  
       2017-07-23 02:20:52 +08:00 via iPhone
    这这这。。。快拿我的补品来!
    bumz
        50
    bumz  
       2017-07-23 03:47:43 +08:00
    @wyan453351466 直接用微信屏蔽图片的方法就能快速图片去重——哈希
    bumz
        51
    bumz  
       2017-07-23 03:58:38 +08:00
    @sobigfish 脸部识别去重,别开玩笑了

    此外你给的是 face detection,不是 face recognition

    face detection 顶多就是把图片中的脸框起来,对去重有毛用?

    至于那些面部识别的先进的网络——你先给服务器整个 TitanX 去?
    wyan453351466
        52
    wyan453351466  
    OP
       2017-07-23 07:08:57 +08:00 via iPhone
    @bumz 不同图片大小(但实际图片相同)的也能识别吗?
    insoxin
        53
    insoxin  
       2017-07-23 08:42:04 +08:00 via Android
    @wyan453351466 源码分享吗🌚
    wyan453351466
        54
    wyan453351466  
    OP
       2017-07-23 10:10:50 +08:00 via iPhone
    @insoxin 过段时间会开源的
    cjjia
        55
    cjjia  
       2017-07-23 10:15:05 +08:00 via Android
    看“最新”栏目,看到一个裸男,简直辣眼睛!!!!
    bumz
        56
    bumz  
       2017-07-23 10:23:18 +08:00
    @wyan453351466 你要做图片内容去重,你就上 TitanX 显卡集群

    但是大多数重复发帖都是完全同样的图片,哈希足够了
    zjlin1984
        57
    zjlin1984  
       2017-07-23 10:31:10 +08:00
    路过,赞。
    coolypf
        58
    coolypf  
       2017-07-23 11:16:46 +08:00
    为什么都是 18+?
    wyan453351466
        59
    wyan453351466  
    OP
       2017-07-23 11:45:10 +08:00 via iPhone
    @coolypf 18+的意思是 18 岁以下禁止访问。。
    halicando
        60
    halicando  
       2017-07-23 11:47:14 +08:00
    豆瓣会不会封你的 ip ?
    wyan453351466
        61
    wyan453351466  
    OP
       2017-07-23 12:22:41 +08:00 via iPhone
    @halicando 爬取快的话会的。所以我控制了爬取频率
    caniuse
        62
    caniuse  
       2017-07-23 14:14:41 +08:00
    第 3 张可以
    sobigfish
        63
    sobigfish  
       2017-07-23 15:05:36 +08:00
    去重复的;
    脸部识别什么的
    @bumz 大哥看见分号了么?学过中文么? 因为他有些采集到是没有妹子的照片,是物品的这种情况
    loveqianool
        64
    loveqianool  
       2017-07-23 15:40:37 +08:00
    也可以爬一下某几个贴吧,比如萝莉吧
    wyan453351466
        65
    wyan453351466  
    OP
       2017-07-23 16:18:11 +08:00
    @loveqianool 嗯,以后可以关注下。。其他的高质量的妹子图多的网站。例如 lofter,还有知乎。。
    bumz
        66
    bumz  
       2017-07-23 17:02:09 +08:00
    @sobigfish 大哥学过中文吗?中文中有最后以分号结尾而不是句号结尾的吗???

    脸部识别?开玩笑,大多数妹子图都只有胸和屁股

    应该上鉴黄(😊)
    ericgui
        67
    ericgui  
       2017-07-23 17:08:55 +08:00
    @wyan453351466 好的, 等你开源 ,拜读一下
    huage
        68
    huage  
       2017-07-23 17:17:44 +08:00
    欢迎写一个探探和他趣的爬虫,各位坐稳了!
    ericgui
        69
    ericgui  
       2017-07-23 17:21:08 +08:00
    @wyan453351466 你的这个言说的站,是用 reddit 的开源的代码做的吧?感觉很熟悉的感觉
    wyan453351466
        70
    wyan453351466  
    OP
       2017-07-23 17:22:37 +08:00
    @ericgui 对,这个网站的确是模仿的 reddit 网站哈。但是源代码不是用的 reddit 开源的。。是自己写的。。
    qq1455018613
        71
    qq1455018613  
       2017-07-23 17:23:21 +08:00
    老司机
    xiahei
        72
    xiahei  
       2017-07-23 17:28:42 +08:00
    ericgui
        73
    ericgui  
       2017-07-23 17:41:41 +08:00
    @wyan453351466 挺牛逼
    SkyKoo
        74
    SkyKoo  
       2017-07-23 17:44:09 +08:00
    同样的图片应该可以用 MD5 判断下
    wyan453351466
        75
    wyan453351466  
    OP
       2017-07-23 20:13:50 +08:00 via iPhone
    @SkyKoo 嗯,回头试一下
    wyan453351466
        76
    wyan453351466  
    OP
       2017-07-23 20:50:47 +08:00 via iPhone
    @ericgui 谢谢!
    hancc
        77
    hancc  
       2017-07-23 21:09:41 +08:00
    哎,自从上了 V 站,身体一天不如一天。
    wyan453351466
        78
    wyan453351466  
    OP
       2017-07-23 21:54:50 +08:00 via iPhone
    @hancc 哈哈,这句话好眼熟。。
    foursking
        79
    foursking  
       2017-07-23 22:01:25 +08:00
    楼主 如果我直接爬你的站会介意吗?如果不介意,那就不客气了啊
    wyan453351466
        80
    wyan453351466  
    OP
       2017-07-23 22:07:40 +08:00 via iPhone
    @foursking 可以爬,就是希望控制一下爬取频率哈。。。爬太快我怕网站扛不住😂
    foursking
        81
    foursking  
       2017-07-23 22:10:16 +08:00
    @wyan453351466 放心放心
    siyiye
        82
    siyiye  
       2017-07-23 22:17:04 +08:00
    来个每月分期打包下载吧~~~
    dreamery
        83
    dreamery  
       2017-07-23 22:20:35 +08:00 via iPhone
    不错👍
    wyan453351466
        84
    wyan453351466  
    OP
       2017-07-23 22:44:24 +08:00 via iPhone
    @siyiye 后期可以考虑搞一个。。传到百度云盘。。
    pagict
        85
    pagict  
       2017-07-24 08:07:07 +08:00 via iPhone
    我发现豆瓣各个大尺度的小组已成为新手爬虫项目的基本源了 哈哈😂
    aksoft
        86
    aksoft  
       2017-07-24 09:35:41 +08:00
    还可以并发了?
    wyan453351466
        87
    wyan453351466  
    OP
       2017-07-24 09:49:33 +08:00
    @aksoft 可以啊。。
    wyan453351466
        88
    wyan453351466  
    OP
       2017-07-24 11:40:38 +08:00 via iPhone
    @dreamery 谢谢!
    wyan453351466
        89
    wyan453351466  
    OP
       2017-07-29 15:16:03 +08:00
    plpptp
        90
    plpptp  
       2017-08-13 13:02:24 +08:00 via Android
    404
    zonzin
        91
    zonzin  
       2017-08-16 19:42:23 +08:00
    说好的开源呢。等
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2786 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:05 · PVG 20:05 · LAX 04:05 · JFK 07:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.