Python实战 | 手把手教你爬取豆瓣电影 Top 250(附全部代码及福利哦)

《Python实战 | 手把手教你爬取豆瓣电影 Top 250(附全部代码及福利哦)》

主要目标

又是一个美好的周六, 祝大家一天好心情……

本次python实战,主要目标是利用python爬取豆瓣电影 Top 250信息,如上图所示。这些信息主要包括排名、片名、评分、上映时间、主演等信息。爬取的网址url是https://movie.douban.com/top250,爬取后的结果会保存在csv文件里面。

关注本号(data_circle)回复“豆瓣电影”,获得所有源代码。


环境准备


环境:MAC + Python3.6 ;  IDE: Pycharm. 具体使用的模块如下。


import requests import re import json 

但是如果你的系统上安装了anaconda,模块requests已经安装完成,但是pycharm不能识别。此时只需要使用preferences直接进行安装,入下图所示,点击+,直接安装即可。


《Python实战 | 手把手教你爬取豆瓣电影 Top 250(附全部代码及福利哦)》


爬取分析

我们的目标是爬取豆瓣电影 Top 250,打开网页发现共10个页面。也就是说我们需要解析10个页面,使用一个for循环来实现。当点击第二页时发现,网址也发生了变化,比之前多了参数start=25,具体的网址是  https://movie.douban.com/top250?start=25&filter=,显示的电影排名是从26到50,如图所示


《Python实战 | 手把手教你爬取豆瓣电影 Top 250(附全部代码及福利哦)》

根据以上分析,我们可以使用star作为循环计数器。如果显示的是star是n,则显示的电影排名是n+1~n+25,每页显示25个。具体代码实现如下


if __name__ == '__main__':
    #循环10次
    for i in range(10):
        main(start= i* 25) 


爬取页面

对于每一个页面的爬取,我们使用的requests库。Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。它比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装或者使用pycharm软件安装(如上文所示).

直接使用库requests中的get方法对目标网址发出申请。为了防止请求的页面没有成功,我们添加了捕获异常的代码块try,except。另外,如果多次爬取同一个网址,您的ip可能被封,不能在爬取任何信息。为了解决此问题,本次在代码中设置了代理信息,具体代码请关注人工智能与大数据生活(data_circle),文末长按二维码即可,回复 ”豆瓣电影“ 获得全部代码。

`python` def get_one_page(url):     '''
        抓取第一页内容
    :return: 请求的页面的信息
    '''     try:
       
        response = requests.get(url,headers=headers)

        if response.status_code == 200:
            return response.text

        return None     except RequestException:
        return None 


页面解析

当爬取到想要的信息以后,就可以对其解析,然后提取想要的信息。常见的方法有很多,比如正则表达式、xpath解析等。本文是使用正则表达式进行解析。

使用google浏览器,右键选择检查,查看需要爬取的网址源代码,具体如下。从图可得知,每一部电影的源代码是一个节点

  • 节点,里面包含了所有的信息。比如在之后有一个子节点em里面包含了排名信息26. 


    《Python实战 | 手把手教你爬取豆瓣电影 Top 250(附全部代码及福利哦)》


    然后,我们用正则表达式提取排名。首先 使用

  • 定位到包含电影信息的节点,然后使用通配符找到em节点,在使用非贪婪匹配来提取包括排名的信息,26.具体代码如下。

    
    		
  • .*?<em.*?\"\">(.*?) </em.*?<>
  • 按照此方法,我们以此提取网页中的影片名称,比如《霸王别姬》、评分信息等,代码如下:。具体代码请关注大数据生活(data_circle),文末长按二维码即可,回复 ”豆瓣电影“ 获得全部代码。

    `python` def parse_one_page(html):     '''
             使用正则表达式解析页面信息
    
        :param html:
        :return:
        '''     items = re.findall(pattern,html)
    
        print(items)
        #yield函数,生成字典格式更加好看     for itme in items:
            yield{
                'range': itme[0],
                'image': itme[1],
                'title': itme[2],
                'infor': itme[3],
                'rating':itme[4],
                'intro':itme[5]
            } 


    最后的结果如下:

    《Python实战 | 手把手教你爬取豆瓣电影 Top 250(附全部代码及福利哦)》

    保存文件

     

    解析后的结果,我们使用write函数写入csv文件中,代码如下。

    def write_to_file(content): '''
    
              保存结果到CSV文件
        :param content:
        :return: 无
        '''
    
        with open('douban_movie_250.csv','a',encoding='utf-8') as f:
            f.write(json.dumps(content,ensure_ascii=False)+'\n')

    本次实战中,我们通过爬取豆瓣电影 Top 250,了解了requests和正则表达式的用法。时间过的真快,不知不觉天亮了。抬头看一下久违的鱼肚白,感觉满满的正能量,敬请期待下周六的python实战,不见不散。感谢阅读。


    往期实战及福利

    1. 关注微信公众号:人工智能与大数据生活(data_cricle), 送您

      1. 回复“豆瓣电影”,获得所有源代码 

      2. 2.7G  380份最新数据分析报告

      3.  40G  人工智能算法课

      4.  已关注的小伙伴,直接回复数据分析报告、人工智能算法

    2. 关注后,回复 PM2.5 获得 Python分析北京pm2.5 源代码以及数据集

      1. 原文链接: Python分析北京PM2.5,原来每年的值都在变少……

    3. 关注后,回复 世界杯, 获得 预测世界杯冠军源代码以及数据集

      1. 原文链接:2018世界杯来了,利用Python预测冠军(附全部代码和数据集)

  •     原文作者:lovenankai
        原文地址: http://blog.itpub.net/22762680/viewspace-2157168/
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞