V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
waibunleung
V2EX  ›  Python

学 Python 不久,尝试写了个 instagram 爬虫,想问问大家的建议?

  •  2
     
  •   waibunleung · 2019-06-08 18:11:26 +08:00 · 5289 次点击
    这是一个创建于 1980 天前的主题,其中的信息可能已经有所发展或是发生改变。

    学 python 不久,尝试参照别的库写了个 instagram 爬虫,想问问大家的建议?

    link: https://github.com/luengwaiban/instagram-python-scraper

    按照自己感觉写的,望各位 python 大虾能指点一下,教练,我想变强~

    第 1 条附言  ·  2019-06-09 10:40:08 +08:00
    不少同学都收藏了主题....还是希望大家看完之后给点评价,我现在有点盲头苍蝇的感觉...谢谢大家了~!
    第 2 条附言  ·  2019-06-09 12:15:09 +08:00

    从v站过去了接近200人,大家都看了一下不说话,我很好奇为什么会这样...还是说我太唠叨了...(哭

    第 3 条附言  ·  2019-06-11 00:47:11 +08:00
    看到大家在别的帖子讨论得这么热烈,好想他们也来这里讨论一下啊~啊~
    38 条回复    2019-12-09 10:29:27 +08:00
    waibunleung
        1
    waibunleung  
    OP
       2019-06-08 18:22:56 +08:00
    little cute one waiting for you masters~
    dt2vba
        2
    dt2vba  
       2019-06-08 19:40:32 +08:00
    厉害,感觉方法的命名很不错,简洁、规范
    vkhsyj
        3
    vkhsyj  
       2019-06-08 20:12:04 +08:00
    写的不错,代码规范也挺好的,说实话不像新手写的
    Northxw
        4
    Northxw  
       2019-06-08 20:55:30 +08:00
    老油条~
    waibunleung
        5
    waibunleung  
    OP
       2019-06-08 20:57:09 +08:00
    @vkhsyj 之前有写过一下 php,不过也不是很厉害,算是有一点编程基础,谢谢您的肯定
    waibunleung
        6
    waibunleung  
    OP
       2019-06-08 20:58:58 +08:00
    还是恳请大家提出一些改进的建议,我现在心里没什么底的,因为我之前没接触过 python 开发,也不知道这样写是否是好的方式,请大家不要吝啬批评和建议呀~
    waibunleung
        7
    waibunleung  
    OP
       2019-06-09 01:10:09 +08:00
    up 一下期待更多大佬进来指点~
    claysec
        8
    claysec  
       2019-06-09 12:38:28 +08:00 via iPhone
    都能直接写包了😂😂😂
    claysec
        9
    claysec  
       2019-06-09 12:41:05 +08:00 via iPhone
    能拜师吗(滑稽)
    waibunleung
        10
    waibunleung  
    OP
       2019-06-09 12:56:42 +08:00
    @claysec 噗...别啊大哥,我认真的,我在各位大佬面前不敢抬头啊~
    tikazyq
        11
    tikazyq  
       2019-06-09 15:11:39 +08:00 via iPhone
    可以用爬虫平台 Crawlab 来管理你的爬虫,https://github.com/tikazyq/crawlab
    waibunleung
        12
    waibunleung  
    OP
       2019-06-09 15:38:02 +08:00
    @tikazyq ok,谢谢你的推荐。另外关于我项目上的建议吗?
    tikazyq
        13
    tikazyq  
       2019-06-09 16:53:25 +08:00
    单个网站来说不错,可以考虑一下用同样的框架扩展到其他社交平台,这样就强大得多了
    waibunleung
        14
    waibunleung  
    OP
       2019-06-09 17:47:43 +08:00
    @tikazyq 谢谢你的建议,我会认真考虑一下的,十分感谢~!
    fenghuang
        15
    fenghuang  
       2019-06-09 19:11:28 +08:00
    楼主您好,能介绍一下整个开发流程吗?我现在写爬虫只写了一个 py 文件,感觉不成体系
    nondanee
        16
    nondanee  
       2019-06-09 19:31:42 +08:00
    看了下 usage 感觉不像爬虫像 SDK 啊,要不你改个名吧😂
    waibunleung
        17
    waibunleung  
    OP
       2019-06-09 20:26:32 +08:00
    @nondanee 那我改成什么比较好?或者你印象中爬虫是怎么样的呢?
    waibunleung
        18
    waibunleung  
    OP
       2019-06-09 20:28:29 +08:00
    @fenghuang 首先要有大概的整体逻辑的设计,然后就是模块适当分离,然后公用的部分抽取一下,最后组合起来,大概是这样吧,如果觉得不清晰我们可以再交流。其实我在项目里面放了一个 design.md ,你可以看看~
    BlackL
        19
    BlackL  
       2019-06-09 21:51:04 +08:00
    楼主你好,请问你的 InitializerModel 类中_is_auto_constructed 这个属性是起什么作用呢,因为整个类初始化的时候这个属性一直为 False,我也没在其他子类中见到过更改这个属性的,所以想问下这个属性的作用
    Takamine
        20
    Takamine  
       2019-06-09 21:58:35 +08:00 via Android
    厉害,从分层到代码再到注释,都很漂亮阿。(。ò ∀ ó。)

    个人感觉硬是要“鸡蛋里面挑骨头”的话(别打我 233333 ),那我感觉可能不够 pythonic。

    可能我是想要看到 @property (干掉 Java 一般的 get,set ),
    一些内容返回可以跟 scrapy 返回到 middleware 层一样试试 yield,
    提到爬虫,那就什么 async/wait,线程池阿都换上去,
    异常有了,日志也不能缺,用装饰器加上些功能。


    各位别打我,我对楼主也是服气,楼主带我飞。_(:з」∠)_
    waibunleung
        21
    waibunleung  
    OP
       2019-06-10 09:46:46 +08:00
    @Takamine 赞啊!
    因为之前自己不是学 python 的,所以受别的语言的一些影响就把其他语言的一些东西带到过来了。所以写完之后自己也觉得不够 pythonic,才发了这个帖子希望有经验的大大来指点一下。
    谢谢你的建议,线程其实之前有考虑,但是没想好线程对应怎样的使用场景,因为 instagram 的接口的分页数据获取是采用游标的形式的,没办法像常规爬虫那样有规律地分页去安排不同线程去获取不同分页段的数据。不过如果是按照用户列表去爬取用户的 post 的话,以及下载用户媒体的时候,线程就可能可以起到作用了。
    另外我看了廖雪峰的博客,他建议是 进程 + async/await 的方式比使用线程高效。
    至于 @property 之前我试着用了一下,因为我项目里面大部分是 get,极少 set,如果我使用了 @property,我需要写 getter 和 setter,心里想着 set 可以直接通过 obj.key=value 的方式设置,那就没有太大的必要再写多一次 setter,在我看来 @property 在对某些属性有限制时的场景下比较有实际意义,普通场景下感觉用不用都可以,也不知道这样的想法是不是我还不够深入的原因,所以最后没有采用 @property
    日志这一块我不知道作为一个库加上日志是否合适,但是我会认真考虑~
    说了很多,就当是相互交流一下想法,真心谢谢你的建议,这正是我想看到的,十分感谢~QwQ
    deleteDB
        22
    deleteDB  
       2019-06-10 10:01:31 +08:00
    很用心 点个赞
    fank99
        23
    fank99  
       2019-06-10 10:01:37 +08:00
    写的很好 学习了
    baojiweicn2
        24
    baojiweicn2  
       2019-06-10 10:02:17 +08:00
    写的很不错。get_value / set_value 不够 pythonic,其他各个方面都蛮不错的。 楼上提到 async/await 确实是不错的。 @property 的表达方式。
    waibunleung
        25
    waibunleung  
    OP
       2019-06-10 10:09:44 +08:00
    @baojiweicn2 关于 get_value / set_value 不够 pythonic 这点,我在楼上给出了我的想法,不知道这样的想法是否合理?还是说使用 @property 会更好一点?

    我的想法:
    至于 @property 之前我试着用了一下,因为我项目里面大部分是 get,极少 set,如果我使用了 @property,我需要写 getter 和 setter,心里想着 set 可以直接通过 obj.key=value 的方式设置,那就没有太大的必要再写多一次 setter,在我看来 @property 在对某些属性有限制时的场景下比较有实际意义,普通场景下感觉用不用都可以,也不知道这样的想法是不是我还不够深入的原因,所以最后没有采用 @property
    waibunleung
        26
    waibunleung  
    OP
       2019-06-10 10:10:20 +08:00
    @fank99 还是有很多可以改进的地方,谢谢你的赞同~
    waibunleung
        27
    waibunleung  
    OP
       2019-06-10 10:10:50 +08:00
    @deleteDB 感谢鼓励!
    waibunleung
        28
    waibunleung  
    OP
       2019-06-10 13:24:16 +08:00
    @BlackL 是 _is_auto_construct 才对,还我找了好久的说。如果这个属性为 True,则在初始化这个对象时,如果对象里面有属性方法,则会调用逐个调用对象的属性方法
    fenghuang
        29
    fenghuang  
       2019-06-10 14:52:32 +08:00
    @waibunleung 好的谢谢,不懂再请教
    waibunleung
        30
    waibunleung  
    OP
       2019-06-13 11:29:03 +08:00
    居然碰到一个跟我差不多但是自己写脚本刷 star 的上来了...真是醉了
    1KN6sAqR0a57no6s
        31
    1KN6sAqR0a57no6s  
       2019-08-30 14:45:39 +08:00
    无法获取评论。media.get_comments()获取的一直是空数组,instagram.get_media_comments_by_code()报错 AttributeError: module 'instagram_scraper.model' has no attribute 'Comment',尝试登录会报错 "Select where to send security code......TypeError: can only concatenate str (not "int") to str"
    susix
        32
    susix  
       2019-09-20 22:42:43 +08:00
    @waibunleung
    刚刚好像看到了。。。是这个? github.com/realsirjoe/instagram-scraper,
    楼主是 6.2 开的,这人是 6.10 开的,star 是楼主的十倍。。。
    lpdy4
        33
    lpdy4  
       2019-10-28 15:59:13 +08:00
    看了一下午这个库,回 V2 搜了下竟然找到原作者,很棒啊。
    waibunleung
        34
    waibunleung  
    OP
       2019-10-29 10:16:57 +08:00
    @lpdy4 哇塞,请问你是怎么发现这个库的
    lpdy4
        35
    lpdy4  
       2019-10-30 09:38:38 +08:00
    @waibunleung #34 google Instagram 爬虫第三个就是你的库~~( ps.有一些特别初级的问题想请教下,不知道 tg or wechat 是否方便
    smttop
        36
    smttop  
       2019-12-06 18:49:27 +08:00
    @waibunleung 我也是新手,研究了很久不知道怎么运行下去,在本地运行一直有报错,请问能否加你 QQ 请教几个问题,谢谢!
    waibunleung
        37
    waibunleung  
    OP
       2019-12-09 10:29:10 +08:00
    @lpdy4 你好,抱歉这么晚才看到,可以的,请联系我 wechat:shinelamla
    waibunleung
        38
    waibunleung  
    OP
       2019-12-09 10:29:27 +08:00
    @smttop 加微信吧 wechat:shinelamla
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:13 · PVG 10:13 · LAX 18:13 · JFK 21:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.