900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 简单Python爬虫实例:抓取豆瓣热映电影信息

简单Python爬虫实例:抓取豆瓣热映电影信息

时间:2021-02-16 22:48:31

相关推荐

简单Python爬虫实例:抓取豆瓣热映电影信息

最近在学习Python爬虫基础,仅用博客记录下学习的过程。

学习过程基于麦子学院的课程,感谢麦子学院,感谢Joey老师。

那么我们来看一下,怎么抓取数据。

Chrome浏览器有一个开发者工具,很适合查看网页源代码,所以我们用Chrome。

打开之后是这样:

然后我们在网页地址栏输入豆瓣电影的链接:

/

进入网页以后,我们利用开发者工具中的抓取链接工具(左上角的指针工具):

点击,然后选取一个正在热映的电影面板

然后我们看到开发者工具跳转到该面板的源代码处:

我们可以看到,我们所需要的数据,就在这里,热映信息的是用类似一个class的字典去存储的,在class前面li,即是它对应的Tag值,本次测试中,我们需要四个数据:电影名称,评分,导演名,主演名单,代码中我们可以看到,在字典中,对应的4个Key值分别是data-title,data-rate,data-director,data-actors。

那么我们的编程思想就出来了:先抓取豆瓣电影的网页数据,然后根据tag值和data-title去筛选我们想要的class,将四个关键的key和value存到我们自己的字典里,然后显示出来。

以下,上代码:

# -*- coding: utf-8 -*-import urllib2from HTMLParser import HTMLParserclass 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.moviesif __name__ == '__main__':url='/' movies=nowplaying_movies(url)import jsonprint('%s' % json.dumps(movies,sort_keys=True,indent=4,separators=(',',':')))

运行成功以后,我们就会打印出以下数据:

完成!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。