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

同学们,有人用Python写过京东的爬虫吗??问题多多

  •  
  •   vcamx ·
    VcamX · 2013-02-23 17:05:38 +08:00 · 7887 次点击
    这是一个创建于 4278 天前的主题,其中的信息可能已经有所发展或是发生改变。
    python自带的urllib2库写的

    opener = urllib2.build_opener(urllib2.HTTPRedirectHandler(), urllib2.HTTPCookieProcessor())
    webpage = opener.open(url)
    html = webpage.read()
    webpage.close()
    print html

    1. 有的时候可以抓到html代码,但是显示乱码,gbk,gb2312,utf-8都试过了。chardet 也用过,检测出来居然是windows-XXXX。这是什么问题??
    用selenium抓每次都可以正常显示,不存在乱码和抓不到的情况

    2. 有的时候代码抓不到,返回 Errno 10054
    user-agent也修改过,换了各种浏览器的,不行的时候还是不行
    增加其他字段也是一样

    3. 用httplib,代码如下

    c = httplib.HTTPConnection('www.360buy.com')
    html = c.getresponse().read()
    print html
    print len(html)

    显示 一个字符的乱码,但是长度居然有16201!?

    有的时候返回502 bad gateway 的html代码!?

    求大神搭救!!!!!
    13 条回复    2013-02-25 23:02:02 +08:00
    Asimov
        1
    Asimov  
       2013-02-23 17:06:19 +08:00   ❤️ 1
    1。用 Requests
    2。爬慢点,鸡东有防爬
    vcamx
        2
    vcamx  
    OP
       2013-02-23 17:10:19 +08:00
    @Asimov 修改user-agent?试过了,还是一样……我单线程抓的,而且还是在人工测试的情况下……
    hfeeki
        3
    hfeeki  
       2013-02-23 19:00:23 +08:00
    有几个错误算啥?像爬虫这样的应用应该要写很多的预防代码,就是处理各种异常、出错的情况,可能会达到65%甚至更多(80-90),要有心理准备。
    具体复杂性还要看看京东自己的代码质量,是否有进行自动化测试,京东代码质量高(机器可读性好,比较少的特殊处理代码),你的代码就会简单,反之,如果京东的代码质量差(主要是各种各样进行特殊处理的代码),会导致你根本没法使用很简单的代码去爬他们的网页。
    muzuiget
        4
    muzuiget  
       2013-02-23 19:24:53 +08:00   ❤️ 1
    我写过,不过属于玩票性质,现在代码已经失效了。京东是开启 gzip 压缩的,也就是你用 urllib2.open(url).read() 读取出来数据其实是 gzip 的压缩数据,所以你怎么检测编码也是失败,你要自己解压,嫌麻烦就直接用 requests 好了,这个库会自动判断是否开启了 gzip 压缩并替你解压,你读取的就是 html 了。京东的 html 用的是 GBK 编码。
    vcamx
        5
    vcamx  
    OP
       2013-02-23 20:00:56 +08:00
    @muzuiget 原来是gzip,感谢了!
    vcamx
        6
    vcamx  
    OP
       2013-02-23 20:01:52 +08:00
    @hfeeki What are u talking about? = =
    hfeeki
        7
    hfeeki  
       2013-02-23 20:52:42 +08:00   ❤️ 1
    I just talking about my experiences on write a good web crawler. You need to hanle any excepiton or errors, note: it is ANY. Because when writing a web crawler, you must handle all of unexpected problems.
    qiao
        8
    qiao  
       2013-02-23 21:13:37 +08:00   ❤️ 1
    呃,我连 requests 都嫌麻烦,直接上 scrapy 吧。
    vcamx
        9
    vcamx  
    OP
       2013-02-24 00:26:34 +08:00
    @hfeeki 额,你说的我当然知道。我提问只是想知道有没有更好的解决方法而已。anyway,还是谢谢你
    vcamx
        10
    vcamx  
    OP
       2013-02-24 00:28:52 +08:00
    @qiao 好吧……
    @Asimov @muzuiget
    发现用代理可以抓,本机还是有时不行……
    leebo
        11
    leebo  
       2013-02-25 21:36:17 +08:00
    ruby 写采集感觉比较简单 open-uri + nokogiri 感觉很爽
    wenbinwu
        12
    wenbinwu  
       2013-02-25 21:54:40 +08:00
    @vcamx 帮你总结下,@hfeeki 想说的就是要“要有心理准备”,爬虫的纠错代码可能会占总代码量的很大比例
    vigoss
        13
    vigoss  
       2013-02-25 23:02:02 +08:00
    我一看就知道多半是gzip..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3501 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:48 · PVG 12:48 · LAX 20:48 · JFK 23:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.