爬取豆瓣排名前100的电影

    xiaoxiao2021-03-25  62

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步

    最近很多工作需要用到爬虫去爬取各种数据。本人也不是专业爬虫攻城狮,之前也没做过爬虫的相关工作。现在实际中遇到了要用,那就只好硬着头皮上吧。趁着周末稍微有点时间,网上找了找爬虫相关的资料与项目,然后参考其中某一个比较简单一些的,先上手实际搞一个练练手再说。

    1.爬虫的一般思路

    爬虫的基本想法就是以一个初始的url为起点,从这个url出发获得更多的url,并从这些网页中获取想要的数据。像google或者baidu这种级别的公司,爬虫是有非常复杂的算法与非常庞大的工程基础去实现的。我们现在是入门阶段,暂且先不考虑那么复杂的逻辑,先从最简单的获取几个页面的数据开始。

    2.可以直接运行的代码

    废话不多说,直接上可以运行的源码。此部分代码参考了github上得开源项目,并在原来的基础上做了优化与调整。

    #coding:utf-8 import re import urllib2 """ 1.获取排名前100的电影 2.每页电影的数量是25个 3.获得的html页面中,跟电影名相关的有是这行: <span class="title">肖申克的救赎</span> 如下这行跟上一行的结构类似,所以正则匹配的时候需要将此行去掉: <span class="title"> / The Shawshank Redemption</span> """ class SpiderDouBan(object): def __init__(self): self.page = 0 self.base_url = "http://movie.douban.com/top250?start={page}&filter=&type=" self.result = [] self._index = 1 def get_page_html(self): url = self.base_url try: my_page = urllib2.urlopen(url.format(page = self.page * 25)).read().decode("utf-8") except urllib2.URLError, ex: if hasattr(ex, "code"): print "The server couldn't fulfill the request." print "Error code: %s" % ex.code elif hasattr(ex, "reason"): print "We failed to reach a server. Please check your url and read the Reason" print "Reason: %s" % ex.reason return my_page def get_index_and_name(self,my_page): tmp_result = [] items = re.findall(r'<span.*?class="title">(.*?)</span>', my_page, re.S) for item in items: if item.find(" ") == -1 : tmp_result.append("top" + str(self._index) + " " + item) self._index += 1 self.result.extend(tmp_result) def start_spider(self): while self.page <= 3: my_page = self.get_page_html() self.get_index_and_name(my_page) self.page += 1 def main(): spider = SpiderDouBan() spider.start_spider() for item in spider.result: print item if __name__ == '__main__': main()

    3.代码运行结果

    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 飞屋环游记 top37 星际穿越 top38 飞越疯人院 top39 窃听风暴 top40 活着 top41 海豚湾 top42 闻香识女人 top43 V字仇杀队 top44 美丽心灵 top45 教父2 top46 指环王2:双塔奇兵 top47 指环王1:魔戒再现 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 致命ID top90 告白 top91 一一 top92 加勒比海盗 top93 爱在黎明破晓前 top94 阿凡达 top95 风之谷 top96 萤火虫之墓 top97 布达佩斯大饭店 top98 狩猎 top99 断背山 top100 爱在日落黄昏时

    4.简单的说明

    相关的注意事项其实在源码中已经有所注释。再啰嗦几句 1.注意豆瓣的页面是25部电影一页。翻页的时候只有start对应的参数发生变化。 2.在对得到的html代码进行正则匹配的时候,注意有一行的结构与包含电影名一行的结构是一样的,需要进行相应的处理去除。

    转载请注明原文地址: https://ju.6miu.com/read-200023.html

    最新回复(0)