[教程分享] 我是如何写爬虫并且快速建立三个图片站 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
darranhuang
V2EX    分享发现

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

  •  4
     
  •   darranhuang 2017-02-13 21:47:28 +08:00 11924 次点击
    这是一个创建于 3167 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家也看到之前几周我推的三个网站 [ 1000 系列]
    * 一下子打开 1000 张 GI 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
    asd103
        16
    asd103  
       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
    -
    Hansah
        68
    Hansah  
       2017-03-17 14:29:53 +08:00
    为啥一个火车头能解决的事情搞那么复杂。。。
    nicoljiang
        69
    nicoljiang  
    PRO
       2017-03-20 15:51:51 +08:00
    一个都打不开。
    qfdk
        70
    qfdk  
    PRO
       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     Solana     985 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 22:58 PVG 06:58 LAX 15:58 JFK 18:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86