Python 简单爬虫 之 遍历豆瓣电影上所有城市的正在上映栏目

下面是一个爬豆瓣电影的简单爬虫,主要目的:能够在豆瓣电影上爬遍所有城市的正在上映电影;该小爬虫是基于urllib2和HTMLParser完成,有很多不足之处,欢迎大家讨论指正:

-----------------------------------------------------------------------------------------------------------------------------

1.思路:

从豆瓣电影-正在热映(https://movie.douban.com/nowplaying/shanghai/)的网页源码中可以看到所有的正在热映电影以下面的方式罗列出:

id="25894431"

class="list-item"

data-title="星球大战外传:侠盗一号"

data-score="7.4"

data-star="40"

data-release="2016"

data-duration="134分钟"

data-region="美国"

data-director="加里斯·爱德华斯"

data-actors="菲丽希缇·琼斯/迭戈·鲁纳/甄子丹"

data-category="nowplaying"

data-enough="True"

data-showed="True"

data-votecount="51049"

data-subject="25894431"

因此,可以通过找到页面中带有li...的标签来下载所有的正在热映电影信息;同时,从某个城市正在上映电影页面的URL中也可以看到,对于不同的城市只需要更改URL中带的城市名即可构建出对应城市的URL,因此我们只需要建立一个包含所有城市名的列表,然后对其进行遍历即可。

那么如何创建这个包含全国所有城市名的列表呢?从页面中我们可以看到在任意城市下都有一个切换城市选项,对应到源码中就包含了所有城市名的列表:

a class="city-item" href="javascript:;" id="118190" uid="anqing"安庆

a class="city-item" href="javascript:;" id="118244" uid="anyang"安阳

a class="city-item" href="javascript:;" id="118125" uid="anshan"鞍山

a class="city-item" href="javascript:;" id="118421" uid="aletai"阿勒泰

...

因此我们只需要找到带有a...的的标签,并且对应到key为uid的一项,就可以把所有城市名找到,并放到一个列表里面来完成城市的遍历。

按照这个思路,我们的程序只需要准备两个HTMLParser,一个负责抓电影信息,一个负责抓城市信息即可(其实也可以只有一个HTMLParser集成这两个功能),在Main函数里进行城市的遍历和打印每个城市对应的正在上映电影即可。

2.代码分析:

Part 1.负责遍历电影的HTMLParser:

首先创建一个Moive_List用来装提取出来的某个城市的正在上映电影信息;然后重写handle_starttag函数来找到tag = li...的内容;然后我们通过got_data函数把找到的属性data-score和data-title里面的信息提取到一个叫moives的列表中,这就完成对一部电影的处理;通过遍历所有带有li...的标签就可以遍历该城市下所有的电影,最后把每条处理的电影信息都存在Moive_List这个列表中。注意要用 self.MoiveList 才可以在整个class中去修改这个列表

注意并不是所有的tag = li...都对应有电影信息,比如这个li class=""就没有对应任何电影信息。因此我们还需要添加一个if来判断每个li... tag下得到的moives列表是否是我们需要的;如果moives下面没有电影信息,这个moives列表就应该为空,所以可以通过moives列表的长度来去掉空的moives

最后定义一个返回Moive_List的函数,就完成了对一个城市的电影列表的爬取

Part 2.负责遍历城市名的HTMLParser:

与前面的Parser一样,只是我们寻找a...的标签,然后找到属性uid里面的信息并提取到cityname这个列表中;最后同样定义一个返回cityname的函数即可

Part 3. Main函数:

Main函数首先初始化一个MoiveParser和CityParser,然后通过urllib2.request请求任意一个城市的正在上映电影页面,将该页面用parser.feed ()方式给到CityParser中,处理得到城市名字的列表,然后可以构建一个不同城市的URL列表(只需要更换URL最后的城市名即可)

之后用for循环依次访问每个城市对应的URL,并将页面内容用feed方式给MoiveParser,从MoiveParser返回每个城市的正在热映电影名和得分,写入到一个TXT中。同时还可以通过加计数值返回当前的遍历进度

值的注意的是,由于Python对中文不太友好,因此访问中文页面时经常需要处理中文导致的乱码(其实是UTF-8编码)问题,总结如下:

a.对于string或者list,可以通过str.decode('utf-8','ignore').encode('gbk','ignore')的方式进行处理,注意list需要用list.readline()或for str in list:的方式来将list中的每个字符串依次decode('utf-8','ignore').encode('gbk','ignore')

b.对于字典的处理,可以直接用json的方式json.dumps( dict, encoding = 'UTF-8', ensure_ascii = false )来进行中文字符处理

-----------------------------------------------------------------------------------------------------------------

特别鸣谢 douban.com 提供的爬虫练习环境 :)

源代码:如果有兴趣可以留言索取 :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 作者:xlzd 链接:https://zhuanlan.zhihu.com/p/20423182 来源:知乎 著作...
    idealfeng阅读 691评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,448评论 25 707
  • 都说这辈子的朋友,上世的亲人,一定是这样 繁花似锦的春天,走出家门,相约好友,景是美的,心是飞滴 自拍,偷拍,一起...
    往事记录阅读 114评论 0 0
  • 文/李凌 梦露一直是性感的代表,极尽诱惑的曲线。今天也许你会重新认识一下穿着保守的梦露。隐藏在铅笔裙下玲珑有致的身...
    花间精凌阅读 312评论 0 1