美文网首页code程序员的文艺情怀Coding
Python爬虫(一)--豆瓣电影抓站小结(成功抓取Top100

Python爬虫(一)--豆瓣电影抓站小结(成功抓取Top100

作者: Andrew_liu | 来源:发表于2014-12-04 23:03 被阅读33101次

    python爬虫学习给自己定下的第一个小目标, 加油!
    也希望能得到python大大们的指点, 感谢!


    1. 豆瓣抓站流程

    1. 分析url特征(菜鸟阶段)
    2. 对需要抓取的数据设计正则表达式
    3. 处理HTML中一些特征字符,换行符等

    注意异常的处理和字符编码的处理

    2. 实现的功能

    简单的实现了抓取豆瓣电影Top100的电影名称

    3. 后期工作展望

    • 抓取更多的有用数据(如:准确抓取导演, 抓取一个电影评论)
    • 使用多线程爬虫
    • 学习第三方的爬虫框架(Scrapy)
    • 深入理解HTML编码和文本处理

    4. 输出结果

    Top1 肖申克的救赎
    Top2 这个杀手不太冷
    Top3 阿甘正传
    Top4 霸王别姬
    Top5 美丽人生
    Top6 海上钢琴师
    Top7 辛德勒的名单
    Top8 千与千寻
    Top9 机器人总动员
    Top10 三傻大闹宝莱坞
    Top11 泰坦尼克号
    Top12 盗梦空间
    Top13 放牛班的春天
    Top14 龙猫
    Top15 忠犬八公的故事
    Top16 教父
    Top17 大话西游之大圣娶亲
    Top18 乱世佳人
    Top19 天堂电影院
    Top20 搏击俱乐部
    Top21 当幸福来敲门
    Top22 罗马假日
    Top23 楚门的世界
    Top24 海豚湾
    Top25 指环王3:王者无敌
    Top26 两杆大烟枪
    Top27 天空之城
    Top28 飞越疯人院
    Top29 触不可及
    Top30 飞屋环游记
    Top31 十二怒汉
    Top32 鬼子来了
    Top33 天使爱美丽
    Top34 大话西游之月光宝盒
    Top35 窃听风暴
    Top36 V字仇杀队
    Top37 怦然心动
    Top38 无间道
    Top39 闻香识女人
    Top40 蝙蝠侠:黑暗骑士
    Top41 美丽心灵
    Top42 指环王2:双塔奇兵
    Top43 指环王1:魔戒再现
    Top44 剪刀手爱德华
    Top45 活着
    Top46 教父2
    Top47 七宗罪
    Top48 勇敢的心
    Top49 情书
    Top50 哈尔的移动城堡
    Top51 熔炉
    Top52 美国往事
    Top53 死亡诗社
    Top54 音乐之声
    Top55 钢琴家
    Top56 小鞋子
    Top57 被嫌弃的松子的一生
    Top58 狮子王
    Top59 致命魔术
    Top60 玛丽和马克思
    Top61 低俗小说
    Top62 入殓师
    Top63 蝴蝶效应
    Top64 少年派的奇幻漂流
    Top65 沉默的羔羊
    Top66 大鱼
    Top67 射雕英雄传之东成西就
    Top68 阳光灿烂的日子
    Top69 本杰明·巴顿奇事
    Top70 幽灵公主
    Top71 第六感
    Top72 让子弹飞
    Top73 黑客帝国
    Top74 拯救大兵瑞恩
    Top75 上帝之城
    Top76 萤火虫之墓
    Top77 阳光姐妹淘
    Top78 心灵捕手
    Top79 饮食男女
    Top80 大闹天宫
    Top81 西西里的美丽传说
    Top82 海洋
    Top83 一一
    Top84 重庆森林
    Top85 燃情岁月
    Top86 爱在黎明破晓前
    Top87 爱在日落黄昏时
    Top88 风之谷
    Top89 春光乍泄
    Top90 虎口脱险
    Top91 加勒比海盗
    Top92 告白
    Top93 侧耳倾听
    Top94 甜蜜蜜
    Top95 阿凡达
    Top96 菊次郎的夏天
    Top97 驯龙高手
    Top98 真爱至上
    Top99 致命ID
    Top100 超脱
    

    5. 豆瓣抓站源代码

    抓站源代码链接
    个人使用的Python编码规范
    python正则表达式小计

    相关文章

      网友评论

      • 是我在这儿:您好,为什么点开都找不到代码呢,显示Freenom World?
      • a4279ecdf0fd:代码在哪里啊?
      • db91d197dedf:“豆瓣电影爬虫准备就绪, 准备爬取数据...”一直这个样子没反应,这是因为什么??
      • db91d197dedf:我的电脑现在只安装了官网下载的python3.5.2,实现这个爬虫还学要安装哪些库?我还不会安装库,求高手指点一下新手,万分感激!
      • db91d197dedf:感谢作者分享知识!!
      • 69ee1ba3b964:同样看了scrapy文章注册账号来。。膜拜一下,有帮助,谢谢 :blush:
      • 异想派:谢谢楼主的代码,解释的很清晰
      • 0e31df000e87:学习了,代码可以运行,而且注释挺多,结构简单也不难读,谢谢博主
      • SteelZheng:不错学习了,我最近也做了一个爬取妹子图片的爬虫 http://www.jianshu.com/p/984315f63982
      • 30895f740c14:好多pyc文件冗余
      • 0618ab2c1301:!是看了你的scrapy文章所以才注册账号上来的。大神~
      • dae5d7d94002:你好,请问<span.*?class="title">.(*?)</span>和<span.*?class="title">.*?</span>,后面的缺少了一个括号,为什么就不对了呢?
      • Jailman:改了下,在windows上也能用
        # -*- coding:utf-8 -*-


        #!/usr/bin/env python


        #import string
        import re
        import urllib2

        class DouBanSpider(object) :
        """类的简要说明

        本类主要用于抓取豆瓣前100的电影名称

        Attributes:
        page: 用于表示当前所处的抓取页面
        cur_url: 用于表示当前争取抓取页面的url
        datas: 存储处理好的抓取到的电影名称
        _top_num: 用于记录当前的top号码
        """

        def __init__(self) :
        self.page = 1
        self.cur_url = "http://movie.douban.com/top250?start={page}&filter=&type="
        self.datas = []
        self._top_num = 1
        print u"豆瓣电影爬虫准备就绪, 准备爬取数据..."

        def get_page(self, cur_page) :
        """

        根据当前页码爬取网页HTML

        Args:
        cur_page: 表示当前所抓取的网站页码

        Returns:
        返回抓取到整个页面的HTML(unicode编码)

        Raises:
        URLError:url引发的异常
        """
        url = self.cur_url
        try :
        my_page = urllib2.urlopen(url.format(page = (cur_page - 1) * 25)).read().decode("utf-8")
        except urllib2.URLError, e :
        if hasattr(e, "code"):
        print "The server couldn't fulfill the request."
        print "Error code: %s" % e.code
        elif hasattr(e, "reason"):
        print "We failed to reach a server. Please check your url and read the Reason"
        print "Reason: %s" % e.reason
        return my_page

        def find_title(self, my_page) :
        """

        通过返回的整个网页HTML, 正则匹配前100的电影名称


        Args:
        my_page: 传入页面的HTML文本用于正则匹配
        """
        temp_data = []
        movie_items = re.findall(r'<span.*?class="title">(.*?)</span>', my_page, re.S)
        for index, item in enumerate(movie_items) :
        if item.find("&nbsp") == -1 :
        temp_data.append("Top" + str(self._top_num) + " " + item)
        self._top_num += 1
        self.datas.extend(
        0e31df000e87:@jailman 不用改,直接可以跑
      • 6a938ddbee08:为什么你最后提供的个人编码规范和正则表达式的链接有问题,我电脑提示不安全,还报警,什么原因? :scream:
        6a938ddbee08:@Andrew_liu 怪不得,希望改一下链接,这样别人就不会进入不相关的网页啦
        Andrew_liu:@VectorHsi 因为之前是tk免费域名, 现在我使用了http://andrewliu.in 域名
      • 3918ee92fb03:data已经是datum的复数了,没有datas这个单词。movie也拼错了
        Andrew_liu:@hahasong 谢谢指点, 英语确实有待加强
      • chixiaodou:问一下这里while 改成if可以吗?
        https://github.com/Andrew-liu/dou_ban_spider/blob/master/threading_douban.py#L37
        Andrew_liu:@chixiaodou 如何只想执行一次, 可以选择if
      • 720b7fb5e266:棒!
        然后我不懂downloadshell.py和downloadshell.py之间的联系或者说我不懂为啥不是一个.py就搞定 :sweat: ,希望有时间帮解答,感谢!

      • 240342bb94ad:@Andrew_liu 刚好最近想写写爬虫,看到Andrew就进来了
      • Andrew_liu:@子拙 我擦, 师兄这都能发现
      • 240342bb94ad:师弟就是6
      • 520b59b9a6f6:代码写得不错!
      • XiaoluD:@Andrew_liu 不是看不懂,是代码晦涩。
      • Andrew_liu:@XiaoluD 写了那么多注释还读不懂我就没办法了
      • XiaoluD:你的代码真的好晦涩难读
        荒诞鬼:@XiaoluD 我对2 不熟悉 ,看这个更头痛,,其实用xpath和bs 几行就搞定的事情 ,,

      本文标题:Python爬虫(一)--豆瓣电影抓站小结(成功抓取Top100

      本文链接:https://www.haomeiwen.com/subject/otogtttx.html