• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wyan453351466
V2EX  ›  程序员

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

  •  1
     
  •   wyan453351466 · Jul 22, 2017 · 14967 views
    This topic created in 3391 days ago, the information mentioned may be changed or developed.

    访问地址:

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

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

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

    Supplement 1  ·  Jul 23, 2017
    看到大家对开源的呼声比较高。我会在之后的一段时间内抽时间整理下代码,然后把这个爬虫框架开源的。

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

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

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

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

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

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

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

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

    应该上鉴黄(😊)
    ericgui
    ericgui
    Jul 23, 2017
    67
    @wyan453351466 好的, 等你开源 ,拜读一下
    huage
    huage
    Jul 23, 2017
    68
    欢迎写一个探探和他趣的爬虫,各位坐稳了!
    ericgui
    ericgui
    Jul 23, 2017
    69
    @wyan453351466 你的这个言说的站,是用 reddit 的开源的代码做的吧?感觉很熟悉的感觉
    wyan453351466
    wyan453351466
    OP
    Jul 23, 2017
    70
    @ericgui 对,这个网站的确是模仿的 reddit 网站哈。但是源代码不是用的 reddit 开源的。。是自己写的。。
    qq1455018613
    qq1455018613
    Jul 23, 2017
    71
    老司机
    xiahei
    xiahei
    Jul 23, 2017
    72
    ericgui
    ericgui
    Jul 23, 2017
    73
    @wyan453351466 挺牛逼
    SkyKoo
    SkyKoo
    Jul 23, 2017
    74
    同样的图片应该可以用 MD5 判断下
    wyan453351466
    wyan453351466
    OP
    Jul 23, 2017 via iPhone
    75
    @SkyKoo 嗯,回头试一下
    wyan453351466
    wyan453351466
    OP
    Jul 23, 2017 via iPhone
    76
    @ericgui 谢谢!
    hancc
    hancc
    Jul 23, 2017
    77
    哎,自从上了 V 站,身体一天不如一天。
    wyan453351466
    wyan453351466
    OP
    Jul 23, 2017 via iPhone
    78
    @hancc 哈哈,这句话好眼熟。。
    foursking
    foursking
    Jul 23, 2017
    79
    楼主 如果我直接爬你的站会介意吗?如果不介意,那就不客气了啊
    wyan453351466
    wyan453351466
    OP
    Jul 23, 2017 via iPhone
    80
    @foursking 可以爬,就是希望控制一下爬取频率哈。。。爬太快我怕网站扛不住😂
    foursking
    foursking
    Jul 23, 2017
    81
    @wyan453351466 放心放心
    siyiye
    siyiye
    Jul 23, 2017
    82
    来个每月分期打包下载吧~~~
    dreamery
    dreamery
    Jul 23, 2017 via iPhone
    83
    不错👍
    wyan453351466
    wyan453351466
    OP
    Jul 23, 2017 via iPhone
    84
    @siyiye 后期可以考虑搞一个。。传到百度云盘。。
    pagict
    pagict
    Jul 24, 2017 via iPhone
    85
    我发现豆瓣各个大尺度的小组已成为新手爬虫项目的基本源了 哈哈😂
    aksoft
    aksoft
    Jul 24, 2017
    86
    还可以并发了?
    wyan453351466
    wyan453351466
    OP
    Jul 24, 2017
    87
    @aksoft 可以啊。。
    wyan453351466
    wyan453351466
    OP
    Jul 24, 2017 via iPhone
    88
    @dreamery 谢谢!
    wyan453351466
    wyan453351466
    OP
    Jul 29, 2017
    89
    plpptp
    plpptp
    Aug 13, 2017 via Android
    90
    404
    zonzin
    zonzin
    Aug 16, 2017
    91
    说好的开源呢。等
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1547 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 134ms · UTC 23:29 · PVG 07:29 · LAX 15:29 · JFK 18:29
    ♥ Do have faith in what you're doing.