Python第一次爬虫实战小记之豆瓣Top250

一、网络爬虫概述

        网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

二、项目实施

目标网站:豆瓣电影 Top 250

目标内容:电影详情链接、电影图片链接、电影中文名、电影外文名、电影评分、评分人数、电影概况、导演/主演信息

Python第一次爬虫实战小记之豆瓣Top250_第1张图片

 

准备工作:制作一个爬虫之前,我们需要先了解爬虫的原理以及它的工作方式。我们要有一些HTML语言基础,了解HTTP请求方式(GET、POST等),根据自己的爬取需求(深层网页、表层网页)提前在浏览器中获取需要的头部信息为接下来爬虫的伪装做准备。因为本次爬取的目标是静态网页(通过url可以直接访问的网页,纯粹的HTML文件),所以此处准备一个用户代理足够。进行简单网页分析,查看我们需要的数据在源码中的什么位置方便我们后面导航提取。(浏览器F12进入开发者模式->network)

 1.爬取数据(urllib)

Python第一次爬虫实战小记之豆瓣Top250_第2张图片

 首先我们使用urllib库封装一个网页请求(爬虫伪装),根据爬取网站不同深度不同,头部信息可以根据情况多添加一点,不然伪装不够爬取的时候就会被对方网站识破返回418(我是一个杯具),418梗可以自行百度。

Request函数为我们封装一个网页请求,urlopen将这个请求发送给目标网站,下面的except是一个异常报备处理,异常处理使我们代码报错更加精简直接,增加代码健壮性。如果我们的请求发送成功,将返回一个html对象,里面保存的就是一个网页的源码。用read()函数将它读出来并用utf-8解码使页面更加规范,结果如下图

Python第一次爬虫实战小记之豆瓣Top250_第3张图片

 2.解析数据-提炼数据(beautifulsoup、re)

以上操作我们相当于成功爬取了第一页就是前25部电影源码,接下来我们要爬取250部电影的网页内容就是要爬取10页。

get请求的参数会显示在url中,在我们进行网页跳转时我们可以发现url的变化规律,第一页时start=0就是从第一部开始排列,第二页start=25从第26部电影开始排列,通过这个规律对网页进行循环爬取十次

Python第一次爬虫实战小记之豆瓣Top250_第4张图片

 

baseurl = "https://movie.douban.com/top250?start="

Python第一次爬虫实战小记之豆瓣Top250_第5张图片

 datalist空列表用于存放获得的所有电影数据,想要精准拿取每部电影中我们需要的数据,接下来就要使用靓汤(beautifulsoup)和正则表达式(re)对数据进行解析和提炼

使用html.parser解析器对html对象解析后,我们可以直接对源码中的标签以及其内容进行直接遍历

通过源码发现我们所需要的内容都在源码中的item这个大标签,使用靓汤对这个大标签的位置和内容进行一个定位,再使用正则表达式进行精确提炼

Python第一次爬虫实战小记之豆瓣Top250_第6张图片

靓汤遍历item标签 

Python第一次爬虫实战小记之豆瓣Top250_第7张图片

 

正则表达式定义在全局变量中,使用re对item标签中我们想要的数据精确提取,正则表达式定义规律如下图,括号位置是我们需要的数据,r防转义

Python第一次爬虫实战小记之豆瓣Top250_第8张图片

Python第一次爬虫实战小记之豆瓣Top250_第9张图片

爬取之后是这个效果,datalist[]输出如下

Python第一次爬虫实战小记之豆瓣Top250_第10张图片 3.存储数据(pymysql)

数据存储我选择存放在MySQL数据库中,使用pymysql库进行数据库操作

存放之前先创建数据库和数据表,可以在数据库直接创建,也可以使用pymysql执行sql语句

Python第一次爬虫实战小记之豆瓣Top250_第11张图片 

循环插入至数据库 

Python第一次爬虫实战小记之豆瓣Top250_第12张图片

Python第一次爬虫实战小记之豆瓣Top250_第13张图片

4.数据可视化(matplotlib、wordcloud、jieba)

先使用pymysql查询将数据库中的数据提取为接下来列表数据的导入做准备

Python第一次爬虫实战小记之豆瓣Top250_第14张图片

matplotlib绘制折线图、柱状图比较简单,横纵坐标导入数据即可

results = getresult()

遍历出需要的数据至列表,再导入到x、y坐标中,数据量太大我至提取了25部电影的评分和排名

Python第一次爬虫实战小记之豆瓣Top250_第15张图片 Python第一次爬虫实战小记之豆瓣Top250_第16张图片

词云的制作使用wordcloud库搭配matplotlob、jieba库使用,导入数据至词云对象即可

不想在词云中出现的词条可以先创建一个列表过滤,我这里想要展示的为导演和主演出现的频次,过滤词汇量较多,不推荐这种过滤方式,建议对导演和演员信息进行单独爬取,我比较无聊一个一个排的。

Python第一次爬虫实战小记之豆瓣Top250_第17张图片 词云轮廓为《肖申克的救赎》电影海报,词云背景颜色设置的猛男粉

(肖申克越狱成功后在雨中拥抱自由那个...)

 Python第一次爬虫实战小记之豆瓣Top250_第18张图片

 小结:通过本次项目,加深了对python的学习和热爱。本人初学,水平较菜,仅供参考。

 

 

 

 

 

你可能感兴趣的:(Python记录,爬虫,request,matplotlib)