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

[教程分享] 我是如何写爬虫并且快速建立三个图片站

  •  4
     
  •   darranhuang · 2017-02-13 21:47:28 +08:00 · 11537 次点击
    这是一个创建于 2844 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家也看到之前几周我推的三个网站 [ 1000 系列]
    * 一下子打开 1000 张 GIF http://iguooo.com/
    * 妹子 x100 http://www.wulangdashu.com/
    * 十万个日式冷笑话 http://www.iguooo.cn/

    也是我无聊至极写写爬虫,快速搭建的几个网站。

    我会说几个关键点,
    1. 爬虫
    2. 建站
    3. 费用, 为什么有广告
    4. 粘度 & SEO 的反思



    一。 爬虫

    研究了下几个著名的爬虫框架:
    * PySpider
    * Scrapy

    这几个都是比较广义的爬虫,给一个入口然后通过页面中的链接不断抓取。
    对于我来说,我有特定的目标页面和目标页面特定的元素需要爬取。
    于是便放弃了大型框架, 自己做一个定义一个小型脚手架。

    自定义的爬虫,就是维护一个队列,维护一个消费者线程池和一个生产者线程池。外加一个 monitor 线程用于统计队列情况。



    * 利用 Redis 的原子性操作,可以做去重。
    * 利用 Redis List 的 push , pop 的原子性可以做同步的生产消费队列
    * 爬取网页用了 requests + BeautifulSoup 分析
    * 资源后续处理使用 requests 下载资源,七牛的库上传七牛云端
    * 想持续抓取,可以将爬虫加入到 celery 定时任务中

    BaseSpiderClass 代码 :



    二:建站

    因为是做着玩的项目, 爬虫和 web 部分都放在一个项目中。
    然后现在一个项目里面要承接多个 web 项目,每一个项目用的是独立域名,所以就放弃了使用 Flask 的 Blueprint 来配置子域名。
    (有兴趣配置 Blueprint 的同学可以移步 https://github.com/awanabe/FlaskBluePrintDemo 我老早做的一个 Blueprint 的 demo )

    于是就对原先的 nginx -> uwsgi -> flask 的模式做了一对多的改进。

    > 原先一般的 Flask 项目结构是这样的

    ├── config.py # 配置文件
    ├── main.py # 项目入口, 从 service 中引出 flask app ,供 uwsgi 调用
    ├── service # 项目
    ├── ├── static # 静态文件夹
    │   │   ├── css
    │   │   ├── fonts
    │   │   ├── img
    │   │   └── js
    │   ├── templates # 模板文件夹
    │   └── router.py # flask app 初始化 + router
    └── requirement.txt


    > 改造之后,建立多个项目和对应的项目入口,静态资, config 文件,工具类,数据 model 都可以公用。

    ├── config.py # 配置文件
    ├── static # 静态文件夹
    │   ├── css
    │   ├── fonts
    │   ├── img
    │   └── js
    ├── utils
    ├── model.py

    ├── main_01.py # 项目入口, 从 service 中引出 flask app ,供 uwsgi 调用
    ├── service_01 # 项目
    │   ├── templates # 模板文件夹
    │   └── router_01.py # flask app 初始化 + router

    ├── main_02.py
    ├── service_02
    │   ├── templates
    │   └── router_02.py

    ├── main_03.py
    ├── service_03
    │   ├── templates
    │   └── router_03.py

    └── requirement.txt





    * nginx 配置多域名
    * uwsgi 开启多 worker 模式,尽可能的
    * 节约公共云资源,使用本地静态资源配置,所以开启了 nginx 的静态资源域名
    * 全部存储都基于 Redis ,不使用 MySQL 。数据库在服务器中占用内存, IO 都是挺大的。直接用 Redis 查询写入速度大大提升。

    这样就在一台主机,一个项目里面建立起了多个网站。


    三。费用, 为什么有广告

    > 支出
    * 阿里云服务器 1G 内存 + 1Core + 3M 带宽 = 150 元 /月
    * 七牛 因为我的自信,直接 po 上了 1000 张 GIF 的页面, 导致半天时间消耗流量 500G 。 直接扑街, 耗费 150 元。然后改为本机做静态资源
    * 域名 2 个 com+1 个 cn = 100 左右
    * 在 V2EX 上置顶,消耗 2000 个铜币 ~ 60 元吧
    * 时间 5x8 小时

    > 收入
    * 在被七牛重重打击之后,无奈加上了 adsense 广告。有两天因为 V 友帮忙点击,超过了 1 刀一天。大部分一天 0.1~0.5 刀直接 = 8 刀 /28 天

    == 巨大的坑。不可能回本嘛。。所以骂我广告🐶的然后 Block 我的,我真心不是愿意挂广告的。


    四。粘度 & SEO 的反思

    * 一共三个网站,流量比较好的是 GIF 和日式冷笑话,单纯的妹子图不怎么样。 流量比 10 : 1 。 => 有故事有阅读的内容比较有粘度
    * 网站内容的增长几乎为 0 ,我大部分都是一次性爬取的资源。 而且以图片为主,导致搜索引擎无法抓取有效关键词。从搜索引擎进来几乎为 0 。(有评论会好点
    * 图片类型网站重资源消耗,所以文字类型网站 SEO 会好做很多。
    * 在 V 站,妹子图的帖子的收藏很高很高,回复超级少(宅男们,你们很厉害。。
    第 1 条附言  ·  2017-02-14 09:33:56 +08:00
    不好意思大号没金币了 只能用另一个来回复了
    72 条回复    2018-07-15 22:28:01 +08:00
    awanabe
        1
    awanabe  
       2017-02-13 21:56:11 +08:00 via iPhone
    赞👍
    wyx
        2
    wyx  
       2017-02-13 22:06:04 +08:00
    有办法做到盈利么~
    huluhulu
        3
    huluhulu  
       2017-02-13 22:21:43 +08:00
    图片站这么操作是赚不了钱的
    如果用千牛云,费用太高
    如果用本地,流量上来了 并发+读写,机器尤其是硬盘会先扛不住
    能赚钱的方式还是要薅免费的 CDN 赚钱才行
    giuem
        4
    giuem  
       2017-02-13 23:04:37 +08:00 via iPhone
    图片可以丢给 cf 如果不介意国内速度的话
    RE
        5
    RE  
       2017-02-13 23:11:52 +08:00
    1000 张图的量也不大,不知道上传到微博行不行
    awanabe
        6
    awanabe  
       2017-02-14 09:19:28 +08:00 via iPhone
    @giuem 不行的 gif 慢就会一帧一帧加载 超级难受
    原帖里面有人说用 gif 转 mp4 是个好方法
    我用了 lossy 算法 压缩了 gif
    awanabe
        7
    awanabe  
       2017-02-14 09:20:07 +08:00 via iPhone
    @RE 总共 7000 多张。大概 5-7G 。
    awanabe
        8
    awanabe  
       2017-02-14 09:20:18 +08:00 via iPhone
    @wyx
    awanabe
        9
    awanabe  
       2017-02-14 09:20:26 +08:00 via iPhone
    @awanabe tks
    awanabe
        10
    awanabe  
       2017-02-14 09:21:09 +08:00 via iPhone
    @huluhulu 缛了一阵免费的阿里云 cdn ,没多久就用完了几十 G 免费额度
    darranhuang
        11
    darranhuang  
    OP
       2017-02-14 09:22:05 +08:00 via iPhone   ❤️ 1
    大小号用错了哈哈哈
    darranhuang
        12
    darranhuang  
    OP
       2017-02-14 09:24:44 +08:00 via iPhone   ❤️ 1
    @awanabe 大哥串好了
    mdaocao
        13
    mdaocao  
       2017-02-14 09:28:44 +08:00
    那个,,,日本冷笑话,

    [死在了下蹲的时候]

    那个梗没懂
    awanabe
        14
    awanabe  
       2017-02-14 09:30:22 +08:00 via iPhone
    @mdaocao 灵魂出窍…
    Nicksxs
        15
    Nicksxs  
       2017-02-14 09:32:59 +08:00
    tumbzzc
        16
    tumbzzc  
       2017-02-14 09:46:43 +08:00
    没有盈利点,只能算作演示站了。。
    blanu
        17
    blanu  
       2017-02-14 09:56:53 +08:00
    用免费可外链的图床,比如新浪微博……
    darranhuang
        18
    darranhuang  
    OP
       2017-02-14 10:00:11 +08:00   ❤️ 1
    @tumbzzc 兴趣站 图片站确实没啥空间
    darranhuang
        19
    darranhuang  
    OP
       2017-02-14 10:00:35 +08:00   ❤️ 1
    @blanu 微博批量上传 2-3w 张图片 可以操作么?
    graetdk
        20
    graetdk  
       2017-02-14 10:10:34 +08:00
    赞,这个经历还是比较有意思的
    blanu
        21
    blanu  
       2017-02-14 10:16:53 +08:00
    @darranhuang 用小号,换 IP 之类的吧,要解决起来其实不难……好多免费的开放微博图床,也可以直接调(不过估计会把你封了
    kalasoo
        22
    kalasoo  
       2017-02-14 10:24:46 +08:00
    可以分享到掘金 juejin.im 让跟多人看到
    darranhuang
        23
    darranhuang  
    OP
       2017-02-14 10:32:06 +08:00   ❤️ 1
    @blanu 对的, 我最近在做 restful-api , api 都是有频次限制的。
    我之前传七牛,真是用 put_file, 传了 2 天才上传了 5G 的图片
    darranhuang
        24
    darranhuang  
    OP
       2017-02-14 10:32:35 +08:00   ❤️ 1
    @kalasoo 掘金不是 https://gold.xitu.io 这个地址
    kiah
        25
    kiah  
       2017-02-14 10:36:10 +08:00
    现在网站太难做了. 盈利是个问题
    fsgmhoward
        26
    fsgmhoward  
       2017-02-14 11:18:35 +08:00 via iPhone
    赞助服务器要么
    darranhuang
        27
    darranhuang  
    OP
       2017-02-14 11:20:37 +08:00   ❤️ 1
    @Nicksxs 微博可以 @阑夕 老司机
    darranhuang
        28
    darranhuang  
    OP
       2017-02-14 11:21:12 +08:00   ❤️ 1
    @fsgmhoward 好呀 怎么联系哦
    zhaixiaohu
        29
    zhaixiaohu  
       2017-02-14 11:28:57 +08:00
    楼主买的主机太贵了啊,其实价格可以做到低很多的,按照目前的收入,基本上,再增加点就能回本了。
    darranhuang
        30
    darranhuang  
    OP
       2017-02-14 11:30:51 +08:00   ❤️ 1
    @zhaixiaohu 阿里云的 IO 你懂的。。 不买优化 IO 的主机, gif 就是一帧一帧的
    kalasoo
        31
    kalasoo  
       2017-02-14 11:35:48 +08:00
    @darranhuang 两个都可以呢~
    zhaixiaohu
        32
    zhaixiaohu  
       2017-02-14 11:37:39 +08:00
    @darranhuang 楼主下次要买找我,先后跟两个互联网公司云计算部门工作过,打个折应该没啥问题,主机应该能便宜差不多三分之一。
    fsgmhoward
        33
    fsgmhoward  
       2017-02-14 11:42:43 +08:00 via iPhone
    darranhuang
        34
    darranhuang  
    OP
       2017-02-14 11:45:27 +08:00   ❤️ 1
    @kalasoo 投稿了要审核
    exoticknight
        35
    exoticknight  
       2017-02-14 12:04:26 +08:00
    技术栈有意思,但是项目没吸引力(至少对于我来说
    JackyBao
        36
    JackyBao  
       2017-02-14 12:49:44 +08:00
    进来支持 LZ ,帮不上什么忙,把你 3 个网站的广告都点了一遍。
    再接再励!
    kalasoo
        37
    kalasoo  
       2017-02-14 12:50:12 +08:00
    @darranhuang 尽快通过
    kalasoo
        38
    kalasoo  
       2017-02-14 12:51:33 +08:00
    @darranhuang 已经发布了呢
    darranhuang
        39
    darranhuang  
    OP
       2017-02-14 13:38:07 +08:00   ❤️ 1
    @kalasoo tks~
    darranhuang
        40
    darranhuang  
    OP
       2017-02-14 13:38:15 +08:00   ❤️ 1
    @JackyBao 感谢感谢
    huluhulu
        41
    huluhulu  
       2017-02-14 14:51:17 +08:00
    @awanabe CloudFlare ,国内的垃圾不要用。
    mengyang
        42
    mengyang  
       2017-02-14 15:25:44 +08:00
    赞一个,感谢支持下
    Kilerd
        43
    Kilerd  
       2017-02-14 15:53:25 +08:00
    反正我是找不到什么盈利的方法,现在基本都是在贴钱买 VPS , 无奈啊。
    iPhone8
        44
    iPhone8  
       2017-02-14 17:33:51 +08:00
    你先说一天多少流量吧?有没有 200+uv ?
    roist
        45
    roist  
       2017-02-14 17:37:03 +08:00
    学那些不可描述的图片站,使用外国主机
    darranhuang
        46
    darranhuang  
    OP
       2017-02-14 18:50:11 +08:00 via iPhone   ❤️ 1
    @iPhone8 你觉得 v 站连 200 个 uv 都贡献不了嘛?
    darranhuang
        47
    darranhuang  
    OP
       2017-02-14 18:51:11 +08:00 via iPhone   ❤️ 1
    @roist 不可描述的网站图片一直要换图床 哪天图床玩坏了 网站也就玩坏了
    TimLang
        48
    TimLang  
       2017-02-14 18:57:56 +08:00 via Android
    可以用 s3 啊,不然楼主无法继续做下去,如果每天 2g 图片的增长量, vps 硬盘很快就被写满,用 s3 第二等级的存储每个月才 0.019 每 gb ,图片访问可以靠免费的 cdn 。
    iPhone8
        49
    iPhone8  
       2017-02-14 23:32:37 +08:00
    @darranhuang 1000uv 有没有?
    流量这么多才 8dollar/28 天,感觉有点少啊。。。
    iPhone8
        50
    iPhone8  
       2017-02-14 23:33:03 +08:00
    也算正常,毕竟 v 站点广告的不多。
    LINAICAI
        51
    LINAICAI  
       2017-02-15 00:05:52 +08:00
    ...挺无聊的,还不如写个 app ,直接分析 html 做移动广告,不过同样没前途,这么简单能赚钱, v2 的用户就不止这点了。
    akira
        52
    akira  
       2017-02-15 00:09:36 +08:00
    @TimLang s3+cf ?

    按照 lz 的这个级别的用户,上 cdn 其实大部分流量都是回源的。
    fuxkcsdn
        53
    fuxkcsdn  
       2017-02-15 00:12:10 +08:00 via iPhone
    妹子图,日式冷笑话…你告诉我不是爬煎蛋的…
    darranhuang
        54
    darranhuang  
    OP
       2017-02-15 03:28:54 +08:00 via iPhone   ❤️ 1
    @iPhone8 而且 v 站大部分应该都转了 adblock
    darranhuang
        55
    darranhuang  
    OP
       2017-02-15 03:30:38 +08:00 via iPhone   ❤️ 1
    @akira 命中率才 20 多
    darranhuang
        56
    darranhuang  
    OP
       2017-02-15 03:30:58 +08:00 via iPhone   ❤️ 1
    @fuxkcsdn 不是
    t6attack
        57
    t6attack  
       2017-02-15 03:47:30 +08:00
    想看如何赚钱的,可以到网赚类论坛里翻翻。类似教程很多,一堆一堆的。而且十年前是这类文章最多的时候。
    后来百度为了打击采集和伪原创,大规模升级了排名算法。把此类手段压下去了。
    darranhuang
        58
    darranhuang  
    OP
       2017-02-15 10:08:04 +08:00   ❤️ 1
    @t6attack 现在这样的网站比重很低。。直接判定为垃圾站
    velee
        59
    velee  
       2017-02-15 12:16:04 +08:00
    1 图片站匹配 adsense 本身的关键字匹配度就不好,另外 adsense 的平均单价会比较低
    2 图片站的关注点在图片,文字居多的 adsense 的注意力完全不够,国内的那种美女图片+文字的小贴片猎奇广告可能更合适一些。
    3 图片站资源消耗大,尤其在国内带宽比较贵的情况下,盈利难度比文字站点大多个量级。
    4 美女图片属于快消品,不能留住用户,流量损失太快,后续投入过大。
    Yourdaye
        60
    Yourdaye  
       2017-02-15 12:29:32 +08:00 via iPhone
    @t6attack
    @darranhuang 10 年老站长想说,百度原创算法就是个渣渣,本人亲自做个测试,随便弄个站, seo 也随便搞一搞(找一些不是很热门的搜索词,反向 seo ),几个月之后, 2 , 3 千 IP 妥妥的
    MadbookPro
        61
    MadbookPro  
       2017-02-15 15:59:57 +08:00
    比较好奇 adsense 是怎么通过的,我自己的图片站被驳,说内容太少
    wyx
        62
    wyx  
       2017-02-15 22:18:38 +08:00
    @Yourdaye 哎呦,求带路啊
    darranhuang
        63
    darranhuang  
    OP
       2017-02-16 10:58:33 +08:00   ❤️ 1
    @Yourdaye 老司机求带路
    darranhuang
        64
    darranhuang  
    OP
       2017-02-16 10:59:08 +08:00   ❤️ 1
    @MadbookPro 老早做过一次网站申请的。。可以复用啊
    hhxiaolei
        65
    hhxiaolei  
       2017-02-16 13:13:04 +08:00
    @Yourdaye 老司机求带路
    fucker
        66
    fucker  
       2017-02-16 20:19:29 +08:00
    我是如何又一次发现乌云风格楼主
    darranhuang
        67
    darranhuang  
    OP
       2017-03-17 14:25:38 +08:00   ❤️ 1
    -
    siknet
        68
    siknet  
       2017-03-17 14:29:53 +08:00
    为啥一个火车头能解决的事情搞那么复杂。。。
    nicoljiang
        69
    nicoljiang  
       2017-03-20 15:51:51 +08:00
    一个都打不开。
    qfdk
        70
    qfdk  
       2017-03-21 00:59:54 +08:00 via iPhone
    话说小心广告被 ban
    dsg001
        71
    dsg001  
       2017-04-16 11:40:16 +08:00
    网站都挂了
    eluotao
        72
    eluotao  
       2018-07-15 22:28:01 +08:00
    有个爬虫需求 接单吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1747 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:39 · PVG 00:39 · LAX 08:39 · JFK 11:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.