简单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=(',',':')))

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



完成!

猜你喜欢

转载自blog.csdn.net/oneword233/article/details/80742220