【转】爬取豆瓣电影top250提取电影分类进行数据分析

一、爬取网页,获取需要内容

我们今天要爬取的是豆瓣电影top250
页面如下所示:

我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西。直接进入主题吧!

知道我们需要的内容在哪里了,接下来就使用我们python强大的request库先获取网页内容下来吧!获取内容后,再使用一个好用的lxml库来分析网页内容,然后获取我们的内容就可以做下一步操作了。
先贴出使用request库和lxml分析的代码

 1 def get_page(i):
 2             url = ‘https://movie.douban.com/top250?start={}&filter=‘.format(i)
 3
 4             html = requests.get(url).content.decode(‘utf-8‘)    # 使用request库获取网页内容
 5
 6             selector = etree.HTML(html)    # 使用lxml库提取内容
 7             ‘‘‘
 8                 通过观察页面就能发现内容在<div class="info">下的一部分
 9             ‘‘‘
10             content = selector.xpath(‘//div[@class="info"]/div[@class="bd"]/p/text()‘)
11             print(content)
12
13             for i in content[1::2]:
14                 print(str(i).strip().replace(‘\n\r‘, ‘‘))
15                 # print(str(i).split(‘/‘))
16                 i = str(i).split(‘/‘)
17                 i = i[len(i) - 1]
18                 key = i.strip().replace(‘\n‘, ‘‘).split(‘ ‘) # 这里的strip和replace的使用目的是去除空格和空行之类
19                 print(key)

通过获取下来的内容我们发现一部电影的各项内容都是用‘/‘分隔着,我们只需要提取电影分类中的东西,所以我们需要使用

i = str(i).split(‘/‘)

来把内容分隔成几项内容,因为电影分类排在最后,所以我们通过

i = i[len(i) - 1]

来获取分隔后的最后一项也就是我们需要的电影分类,还有最后一步我们需要完成的,因为一部电影里面一般都有多个电影分类的标签,所以我们还要继续分隔获取到的电影分类,并且观察可以知道电影分类之间只是用一个空格隔开,所以我们使用下面一行代码就可以分离出各个分类:

key = i.strip().replace(‘\n‘, ‘‘).split(‘ ‘)

二、接下来就是保存到mysql数据库

把电影分类保存在mysql数据库以便下面进行数据分析,这里我们使用到pymysql来连接mysql数据库,首先我们需要在mysql数据库建好表:

然后我们通过pymysql把数据保存到数据库中,代码如下:
首先要连接数据库:

# 连接mysql数据库
conn = pymysql.connect(host = ‘localhost‘, user = ‘root‘, passwd = ‘2014081029‘, db = ‘mysql‘, charset = ‘utf8‘)  # user为数据库的名字,passwd为数据库的密码,一般把要把字符集定义为utf8,不然存入数据库容易遇到编码问题
cur = conn.cursor()  # 获取操作游标
cur.execute(‘use douban‘)  # 使用douban这个数据库

在保存到数据库之前,我们还有一个需要做得,那就是把250部电影的分类汇总数量,所以我们定义了一个字典来统计电影分类的个数,这里的代码是get_page函数的一部分,代码如下:

for i in content[1::2]:
        print(str(i).strip().replace(‘\n\r‘, ‘‘))
        # print(str(i).split(‘/‘))
        i = str(i).split(‘/‘)
        i = i[len(i) - 1]
        key = i.strip().replace(‘\n‘, ‘‘).split(‘ ‘)
        print(key)
        for i in key:
            if i not in douban.keys():
                douban[i] = 1
            else:
                douban[i] += 1

然后定义一个保存函数,执行插入操作,如果出现插入失败,就执行回滚操作,还有记得在操作完成之后,使用conn.close()和cur.close()来关闭数据库连接,代码如下:

    def save_mysql(douban):
        print(douban)  # douban在主函数中定义的字典
        for key in douban:
            print(key)
            print(douban[key])
            if key != ‘‘:
                try:
                    sql = ‘insert douban(类别, 数量) value(‘ + "\‘" + key + "\‘," + "\‘" + str(douban[key]) + "\‘" + ‘);‘
                    cur.execute(sql)
                    conn.commit()
                except:
                    print(‘插入失败‘)
                    conn.rollback()

三、使用matplotlib进行数据可视化操作

首先,从数据库中把电影分类和每个分类的数量分别存入一个列表中,然后使用matplotlib进行可视化操作,具体如下:

def pylot_show():
        sql = ‘select * from douban;‘
        cur.execute(sql)
        rows = cur.fetchall()   # 把表中所有字段读取出来
        count = []   # 每个分类的数量
        category = []  # 分类

        for row in rows:
            count.append(int(row[2]))
            category.append(row[1])

        y_pos = np.arange(len(category))    # 定义y轴坐标数
        plt.barh(y_pos, count, align=‘center‘, alpha=0.4)  # alpha图表的填充不透明度(0~1)之间
        plt.yticks(y_pos, category)  # 在y轴上做分类名的标记

        for count, y_pos in zip(count, y_pos):
            # 分类个数在图中显示的位置,就是那些数字在柱状图尾部显示的数字
            plt.text(count, y_pos, count,  horizontalalignment=‘center‘, verticalalignment=‘center‘, weight=‘bold‘)
        plt.ylim(+28.0, -1.0) # 可视化范围,相当于规定y轴范围
        plt.title(u‘豆瓣电影250‘)   # 图表的标题
        plt.ylabel(u‘电影分类‘)     # 图表y轴的标记
        plt.subplots_adjust(bottom = 0.15)
        plt.xlabel(u‘分类出现次数‘)  # 图表x轴的标记
        plt.savefig(‘douban.png‘)   # 保存图片

下面说明一下matplotlib的一些简单使用,首先我们要导入matplotlib和numpy的包

import numpy as np
import matplotlib.pyplot as plt

这次可视化是柱状图,这里给出brah()函数的定义:

barh()
主要功能:做一个横向条形图,横向条的矩形大小为: left, left + width, bottom, bottom + height
参数:barh ( bottom , width , height =0.8, left =0, **kwargs )
返回类型:一个 class 类别, matplotlib.patches.Rectangle**实例
参数说明:

  • bottom: Bars 的垂直位置的底部边缘
  • width: Bars 的长度
    可选参数:
  • height: bars 的高度
  • left: bars 左边缘 x 轴坐标值
  • color: bars 颜色
  • edgecolor: bars 边缘颜色
  • linewidth: bar 边缘宽度;None 表示默认宽度;0 表示不 i 绘制边缘
  • xerr: 若不为 None,将在 bar 图上生成 errobars
  • yerr: 若不为 None,将在 bar 图上生成 errobars
  • ecolor: 指定 errorbar 颜色
  • capsize: 指定 errorbar 的顶部(cap)长度
  • align: ‘edge’ (默认) | ‘center’:‘edge’以底部为准对齐;‘center’以 y 轴作为中心
  • log: [False|True] False (默认),若为 True,使用 log 坐标

然后就可以显示出图片来了

原文地址:爬取豆瓣电影top250提取电影分类进行数据分析

时间: 2024-10-13 23:55:01

【转】爬取豆瓣电影top250提取电影分类进行数据分析的相关文章

Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(str(i) for i in range(0, 226, 25))] 2.模块 requests获取网页源代码 lxml 解析网页 xpath提取 3.提取信息 4.可以封装成函数 此处没有封装调用 python代码: #coding:utf-8 import sys reload(sys) sys.

【爬虫】爬取豆瓣图书TOP250

通过xpath定位元素 使用xpath定位元素有好几种方法 // 是从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置. #!/user/bin/env python #coding:utf-8 #先是从selenium导入webdriver,然后用webdriver打开安装好的谷歌浏览器. from selenium import webdriver #打开chrom浏览器 browser =webdriver.Chrome() #访问豆瓣 browser.get('https://bo

爬虫实践-爬取豆瓣音乐TOP250的数据

doubanyinyue.py: import requestsfrom lxml import etreeimport reimport pymongoimport time client = pymongo.MongoClient('localhost', 27017)mydb = client['mydb']musictop = mydb['musictop'] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) A

爬虫-爬取豆瓣图书TOP250

import requests from bs4 import BeautifulSoup def get_book(url): wb_data = requests.get(url) soup = BeautifulSoup(wb_data.text,'lxml') title_list = soup.select('h1 > span') title = title_list[0].text author_list = soup.select('div#info > a') author

Python 爬取豆瓣TOP250实战

学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看. 可以看到每部电影都有比较全面的简介.其中包括电影名.导演.评分等. 接下来,我们就爬取这些数据,并将这些数据制成EXCEL表格方便查看. 首先,我们用requests库请求一下该网页,并返回他的text格式. 请求并返回成功! 接下来,我们提取我们所需要的网页元素. 点击“肖申克救赎”的检查元素. 发现它在div class = "hd" -> span class = "

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

03_使用scrapy框架爬取豆瓣电影TOP250

前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关命令以及理解框架各部分的作用. 1.本次目标 爬取豆瓣电影TOP250的信息,将得到的数据保存到mongoDB中. 2.准备工作 需要安装好scrapy以及mongoDB,安装步骤这里不做赘述.(这里最好是先了解scrapy框架各个部分的基本作用和基础知识,这样方便后面的内容的理解.scrapy文档

[python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对比,你可以进一步加深Python爬虫的印象.同时,文章给出了我以前关于爬虫的基础知识介绍,方便新手进行学习.        总之,希望文章对你有所帮助,如果存在不错或者错误的地方,还请海涵~ 一. DOM树结构分析 豆瓣Top250电影网址:https://movie.douban.com/top2

scrapy爬取豆瓣电影top250

1 # -*- coding: utf-8 -*- 2 # scrapy爬取豆瓣电影top250 3 4 import scrapy 5 from douban.items import DoubanItem 6 7 8 class DoubanspiderSpider(scrapy.Spider): 9 name = "doubanspider" 10 # allowed_domains = ["movie.douban.com/top250"]注意这里的主页限制