python爬虫学习给自己定下的第一个小目标, 加油!
也希望能得到python大大们的指点, 感谢!
1. 豆瓣抓站流程
- 分析url特征(
菜鸟阶段
) - 对需要抓取的数据设计正则表达式
- 处理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 超脱
网友评论
# -*- 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(" ") == -1 :
temp_data.append("Top" + str(self._top_num) + " " + item)
self._top_num += 1
self.datas.extend(
https://github.com/Andrew-liu/dou_ban_spider/blob/master/threading_douban.py#L37
然后我不懂downloadshell.py和downloadshell.py之间的联系或者说我不懂为啥不是一个.py就搞定 ,希望有时间帮解答,感谢!