简单Python爬虫实例:抓取豆瓣热映电影信息
最近在学习Python爬虫基础,仅用博客记录下学习的过程。
学习过程基于麦子学院的课程,感谢麦子学院,感谢Joey老师。
那么我们来看一下,怎么抓取数据。
Chrome浏览器有一个开发者工具,很适合查看网页源代码,所以我们用Chrome。
打开之后是这样:
然后我们在网页地址栏输入豆瓣电影的链接:
https://movie.douban.com/
进入网页以后,我们利用开发者工具中的抓取链接工具(左上角的指针工具):
点击,然后选取一个正在热映的电影面板
然后我们看到开发者工具跳转到该面板的源代码处:
我们可以看到,我们所需要的数据,就在这里,热映信息的是用类似一个class的字典去存储的,在class前面li,即是它对应的Tag值,本次测试中,我们需要四个数据:电影名称,评分,导演名,主演名单,代码中我们可以看到,在字典中,对应的4个Key值分别是data-title,data-rate,data-director,data-actors。
那么我们的编程思想就出来了:先抓取豆瓣电影的网页数据,然后根据tag值和data-title去筛选我们想要的class,将四个关键的key和value存到我们自己的字典里,然后显示出来。
以下,上代码:
# -*- coding: utf-8 -*- import urllib2 from HTMLParser import HTMLParser class MovieParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.movies=[] def handle_starttag(self, tag, attrs): def _attr(attrlist,attrname): for attr in attrlist: if attr[0] == attrname: return attr[1] return None #print(tag) #遍历tag值为li且包含data-title字段的class if tag == 'li' and _attr(attrs,'data-title'): movie={} movie['title'] = _attr(attrs,'data-title') movie['rate'] = _attr(attrs, 'data-rate') movie['director'] = _attr(attrs, 'data-director') movie['actors'] = _attr(attrs, 'data-actors') self.movies.append(movie) print('%(title)s|%(rate)s|%(director)s|%(actors)s' % movie) def nowplaying_movies(url): #headers用来模拟浏览器登录环境 headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'} req=urllib2.Request(url,headers=headers) str=urllib2.urlopen(req) #print(str.read()) parser=MovieParser() parser.feed(str.read()) str.close() return parser.movies if __name__ == '__main__': url='https://movie.douban.com/' movies=nowplaying_movies(url) import json print('%s' % json.dumps(movies,sort_keys=True,indent=4,separators=(',',':')))
运行成功以后,我们就会打印出以下数据:
完成!