标签(空格分隔):python爬虫

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

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

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

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

def get_page(i):url = 'https://movie.douban.com/top250?start={}&filter='.format(i)html = requests.get(url).content.decode('utf-8')    # 使用request库获取网页内容selector = etree.HTML(html)    # 使用lxml库提取内容'''通过观察页面就能发现内容在<div class="info">下的一部分'''content = selector.xpath('//div[@class="info"]/div[@class="bd"]/p/text()')print(content)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(' ') # 这里的strip和replace的使用目的是去除空格和空行之类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] = 1else: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 坐标

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

源码在这里:

# -*- coding: utf-8 -*-
# !/usr/bin/env pythonfrom lxml import etree
import requests
import pymysql
import matplotlib.pyplot as plt
from pylab import *
import numpy as np# 连接mysql数据库
conn = pymysql.connect(host = 'localhost', user = 'root', passwd = '2014081029', db = 'mysql', charset = 'utf8')
cur = conn.cursor()
cur.execute('use douban')def get_page(i):url = 'https://movie.douban.com/top250?start={}&filter='.format(i)html = requests.get(url).content.decode('utf-8')selector = etree.HTML(html)content = selector.xpath('//div[@class="info"]/div[@class="bd"]/p/text()')print(content)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]# print('zhe' +i)# print(i.strip())# print(i.strip().split(' '))key = i.strip().replace('\n', '').split(' ')print(key)for i in key:if i not in douban.keys():douban[i] = 1else:douban[i] += 1def save_mysql():print(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()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])print(count)y_pos = np.arange(len(category))print(y_pos)print(category)colors = np.random.rand(len(count))# plt.barh()plt.barh(y_pos, count, align='center', alpha=0.4)plt.yticks(y_pos, category)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)plt.title(u'豆瓣电影250')plt.ylabel(u'电影分类')plt.subplots_adjust(bottom = 0.15)plt.xlabel(u'分类出现次数')plt.savefig('douban.png')if __name__ == '__main__':douban = {}for i in range(0, 250, 25):get_page(i)# save_mysql()pylot_show()cur.close()conn.close()

爬取豆瓣电影top250提取电影分类进行数据分析相关推荐

  1. Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影

    文章目录 前言 安装bs4库 网站分析 获取页面 爬取页面 页面分析 其他页面 爬虫系列 前言 经过上篇博客Python爬虫小白教程(一)-- 静态网页抓取后我们已经知道如何抓取一个静态的页面了,现在 ...

  2. 爬取豆瓣正在上映的电影

    爬取豆瓣正在上映的电影 1.目标 ​ 爬取豆瓣上显示正在上映的电影的信息,包括电影名.评分.导演.主演等信息.将其保存在一个CSV文件中,可以使用Excel打开查看. 2.思路分析 1.获取网页的UR ...

  3. Python爬取豆瓣正在上映的电影

    Python爬取豆瓣正在上映的电影 #爬取豆瓣正在上映的电影 import requests from lxml import etree #1.将目标从网站上的页面抓取下来 headers = {' ...

  4. python实践 爬取豆瓣各个标签的电影 爬虫

    python实践 爬取豆瓣各个标签的电影 实践题目 爬取豆瓣电影中,华语.欧美.韩国.日本电影每个标签下按评价排序的全部电影,需要如下信息: (1)每个电影的电影名.导演.编剧.主演.类型.国家.上映 ...

  5. requests 获取div_爬虫系列第五篇 使用requests与BeautifulSoup爬取豆瓣图书Top250

    上一篇我们学习了BeautifulSoup的基本用法,本节我们使用它来爬取豆瓣图书Top250. 一.网页分析 我们爬取的网页的url是https://book.douban.com/top250?i ...

  6. 利用Requests库和正则表达式爬取豆瓣影评Top250

    说明 最近看了下爬虫基础,想写个博客来记录一下,一来是可以方便和我一样刚入门的小白来参考学习,二来也当做自己的笔记供自己以后查阅. 本文章是利用python3.6和Requests库(需自行安装,cm ...

  7. 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分

    安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...

  8. 爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中

    爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中 获取源代码请访问https://github.com/zhang020801/douban_bookTop250 一.程序源代码 ...

  9. Python爬虫学习之爬取豆瓣音乐Top250存入Excel表格中

    前言 目标网站:https://music.douban.com/top250 任务: 爬取豆瓣音乐Top250的歌曲名 爬取豆瓣音乐Top250的歌曲对应的表演者.发行时间和音乐流派(分别对应下图斜 ...

  10. 爬虫练习-爬取豆瓣音乐TOP250的数据

    前言: 爬取豆瓣音乐TOP250的数据,并将爬取的数据存储于MongoDB中 本文为整理代码,梳理思路,验证代码有效性--2020.1.1 环境: Python3(Anaconda3) PyCharm ...

最新文章

  1. python 多维数组(array)排序
  2. ASP.NET MVC 分部视图
  3. 基于大数据的消费者洞察
  4. html中css字体颜色代码大全,css字体颜色的设置方法
  5. java ship_用Java对象来解答世界悖论难题“忒修斯之船”
  6. 《底层逻辑》 思维导图
  7. react基础_React基础
  8. 【办公】关于←(Backspace)退格键和Delete键盘的区别
  9. 平均电流型LED降压恒流驱动器 常用恒流IC
  10. matlab 坐标轴居中,MATLAB 把坐标轴(X Y轴)移到坐标原点
  11. MSDN值得学习的地方
  12. 优秀github博主
  13. 三星s5html查看器,三星S5玩机技巧之系统精简篇
  14. Python获取全部股票代码信息(A/B/H/美/英股)
  15. XPS文件转换为PDF不再愁!全新XPS/EPS文档处理神器Aspose.Page来啦!
  16. Canvas - 绘制图片模糊问题(canvas 生成图片模糊)
  17. 华为HiLink认证,什么是华为HiLink认证?华为HiLink认证费用,华为HiLink认证周期,华为HiLink认证测试内容
  18. EditText使用详解
  19. 线程池面试题灵魂三问
  20. 爬虫 第九讲 反爬的策略

热门文章

  1. 常用Bash命令整理
  2. Flare7K数据集简介与论文阅读
  3. 公交卡非法充值与其计费系统之分析
  4. 《2022年中国上市公司数字经济白皮书》(附下载)
  5. 并发编程之线程池的使用及扩展和优化
  6. 高斯计如何用于生物医学研究
  7. 团队使我成长,学习使我快乐
  8. 欧姆龙plc多轴伺服控制程序fb 欧姆龙PLC CP1H 5轴+1转盘电机4工位程序
  9. com2引脚 proface_PRO-FACE串口编程
  10. mcrpg服务器文件,[角色|娱乐]RPGitem-Reloaded 老牌RPG插件[1.13-1.7.2]