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

第一次写爬虫,爬了课程格子的校花榜

  •  1
     
  •   mianju ·
    xinqiu · 2016-02-12 18:50:45 +08:00 · 7494 次点击
    这是一个创建于 2968 天前的主题,其中的信息可能已经有所发展或是发生改变。

    果然是大过年了闲了蛋疼, 给自己找乐子。写了个很简陋的爬虫,爬校花。请原谅我,性能是硬伤> <
    kechenggezi-Spider
    有大牛愿意帮忙改进么。。。

    29 条回复    2016-02-14 11:23:40 +08:00
    Kirscheis
        1
    Kirscheis  
       2016-02-12 19:02:56 +08:00
    设备 token 是什么。。没用过课程格子,这个东西是需要用类似 mitm 抓包的方法拿到的吗?还是算法生成的?
    另外看到代码 cookie 里写死的_kecheng_session ,确定这个值不会改变吗。。?
    mianju
        2
    mianju  
    OP
       2016-02-12 19:13:05 +08:00
    @Kirscheis token 是抓包得到的,_kecheng_session 这个会不会变我也没试过,因为手上只是用了一个账号来做的实验。另外,感觉 token 是假的,我就随便输了个 token ,也是能抓取数据的。
    wenyu1001
        3
    wenyu1001  
       2016-02-12 19:25:03 +08:00   ❤️ 1
    上 gevent or scrapy, 另外需要 code review 。
    mianju
        4
    mianju  
    OP
       2016-02-12 19:26:16 +08:00
    @wenyu1001 多谢指点> <
    shyling
        5
    shyling  
       2016-02-12 19:27:29 +08:00
    为什么我看到性能想入非非= =
    mianju
        6
    mianju  
    OP
       2016-02-12 19:29:51 +08:00
    @shyling 这。。。。
    itfanr
        7
    itfanr  
       2016-02-12 20:38:42 +08:00
    @shyling 好没出息
    Kirscheis
        8
    Kirscheis  
       2016-02-12 22:00:32 +08:00
    @mianju 原来是这样。测试了一下你的爬虫,图片只下载了前二十张就卡住了 (bug?) 。。。单线程下载爬速确实感人。另外返回的图片 url 可以直接去掉后面的 !300x300 ,这样就可以下载到原图了。
    Kirscheis
        9
    Kirscheis  
       2016-02-12 22:04:41 +08:00
    @mianju 我试试加个多线程功能。另外对方返回的本来就是 serialize 了的 json 格式,感觉可以多保存点信息,比如说直接保存 pretty-print 的 jsonline 文件之类的。。
    Kirscheis
        10
    Kirscheis  
       2016-02-12 23:02:01 +08:00 via Android
    发现自己并不会用 python2 。。直接用 scrapy 重构了
    icedx
        11
    icedx  
       2016-02-12 23:04:22 +08:00
    为啥不换个头像呢?
    mianju
        12
    mianju  
    OP
       2016-02-13 00:01:07 +08:00
    @Kirscheis 没有吧,我这边是慢慢悠悠的跑完了 9 千多个照片,就是速度慢,括弧哭,非常感谢你的帮助,第一次写爬虫,所以写的很烂,见谅> <
    gateswong
        13
    gateswong  
       2016-02-13 02:09:29 +08:00 via Android
    性能还好 其实你爬太快的话反而对网站不友好还可能被封
    shyling
        14
    shyling  
       2016-02-13 02:32:14 +08:00 via iPad
    @itfanr 妈蛋,我怎么没出息了
    lijsh
        15
    lijsh  
       2016-02-13 10:46:50 +08:00
    看了下楼主代码,好像 request 用了两次?一次用来求 page 总数,一次用来迭代结果页;感觉可以再打磨一下,结果可不可以一页一页出,像 Generator 那样?
    hqs123
        16
    hqs123  
       2016-02-13 12:54:27 +08:00
    楼主很厉害啊
    xuxiangyang
        17
    xuxiangyang  
       2016-02-13 14:01:20 +08:00
    楼主你好,从我们群里看到了你的帖子,也看了你的 github 。感觉你是个很不错的同学,有没有兴趣来课程格子玩玩爬虫,做做开发呀?有兴趣的话请给我发邮件: [email protected] 课程格子工程师 徐向阳
    lianxiangru
        18
    lianxiangru  
       2016-02-13 14:06:18 +08:00
    @xuxiangyang 给多少工资啊 2333
    aksoft
        19
    aksoft  
       2016-02-13 15:46:29 +08:00
    亮点是校花
    ahxxm
        20
    ahxxm  
       2016-02-13 17:19:14 +08:00
    cookies 丢.gitignore 里吧.... 你这么 commit 上去不太安全
    penjianfeng
        21
    penjianfeng  
       2016-02-13 19:17:47 +08:00
    校花榜...要不我也去爬一下...
    jackyuJ
        22
    jackyuJ  
       2016-02-13 19:20:37 +08:00
    = = 你可以再尝试弄个聚类。
    xuxiangyang
        23
    xuxiangyang  
       2016-02-13 20:18:54 +08:00
    @lianxiangru 可以发简历,然后私聊~
    mianju
        24
    mianju  
    OP
       2016-02-14 10:24:30 +08:00
    @xuxiangyang 当然有兴趣> <,没想到第一次做爬虫就能引起课程格子的注意,还担心写爬虫会违法括弧哭。
    mianju
        25
    mianju  
    OP
       2016-02-14 10:27:25 +08:00
    @ahxxm 非常感谢你的提醒,在后面我会改进的
    mianju
        26
    mianju  
    OP
       2016-02-14 10:35:56 +08:00
    @lijsh 做这个是心血来潮,当时也没考虑太多,就随便先写出一个,来测试一下是否真的能跑完全部的头像
    luw2007
        27
    luw2007  
       2016-02-14 10:51:19 +08:00
    爬取图片没有什么好的办法。 如果过频繁抓取。 会被禁用掉得。

    +++ b/xhspider.py
    @@ -42,12 +42,12 @@ def main():
    #以下代码为保存图片
    count += 1
    conn = requests.get(p[i]['avatar_url'], cookies=cookies,headers=headers)
    - name = str(i) +'.jpg'
    + name = str(count) +'.jpg'
    f = open(r'/path/to/save/'+ name,'wb') #填写保存位置
    f.write(conn.content)
    f.close()
    @Kirscheis 保存的逻辑有问题。
    mianju
        28
    mianju  
    OP
       2016-02-14 10:54:38 +08:00
    @luw2007
    我写的处理方式是修改请求中的 cur_time ,见 xhspider.py 文件,虽然效率低,但是确实能跑完。
    luw2007
        29
    luw2007  
       2016-02-14 11:23:40 +08:00
    @mianju 服务端封禁请求方法很多。 目测目前这个接口没有做访问限制。
    最严厉的限制是封 ip ,一般的做法是利用大量第三方代理去下载图片。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2871 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 11:18 · PVG 19:18 · LAX 04:18 · JFK 07:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.