美文网首页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