请完成爬虫程序的编写,依次实现对电影名称(title),评分(rank),电影主题(subject),电影简介(introduce),电影评论数(comments)的爬取,题目具体内容及要求如下。
(1)实现单页面的爬取(只爬取第一页)。
(2)实现多页面的爬取(爬取所有页)。
(3)依次尝试将数据进行csv存储、excel存储以及mysql存储。
网址:https://movie.douban.com/top250
解决过程:
1.下载scrapy,并新建一个scrapy项目,命名为doubantop250,在doubantop250项目中,创建一个小蜘蛛,名字为douban,爬取域为movie.douban.com。
常用方法:直接在pycharm里实现
首先可以在pycharm打开某个项目,我比较希望自己的scrapy项目都在一个文件夹里,所以我会建一个Scrapy_Project
若此项目没有scrapy,则在pycharm的终端安装scrapy
输入pip install scrapy
若安装成功,输入scrapy,则会显示其版本号等信息
安装完成后,可以选择依旧在此目录下用scrapy命令创建一个scrapy项目
scrapy startproject doubantop250(我这没有加下划线,按照命令规范,大家最好加一下)
项目建成后,就可以cd进入到doubantop250,然后通过
scrapy genspider douban movie.douban.com创建我们的爬虫小蜘蛛。
建成后,大家可以看到我们的spider里面生成了一个douban.py
但是为了避免我们在写解析代码的时候出现继承父类失败的问题,我们还是需要单独打开这个doubantop250项目。
2.在items.py写入我们需要爬取的目标对象(movie_name,rating,movie_subject,introduce,comments)
(注;scrapy.Field()是Scrapy框架中的一个类,用于定义爬取到的数据的字段。)
3.在douban.py写入我们对爬取的目标对象的解析内容
为什么我们解析需要加上extract_first()?我们如果不加会怎么样?
返回的结果就是selcetor选择器对象。
那除了extract_first(),还有其他的吗?
四种常用的:get() 、extract_first()、get_all() 、 extract()
get() 与 extract_first()功能一致
返回的是一个list列表,里面包含了多个string,如果只有一个string,则返回['我爱python']这样的形式
get_all() 与 extract()功能一致
返回的是string,list列表里面第一个string
4.在settings.py修改我们的USER_AGENT,并取消注释
5.将数据爬取为csv文件中(在命令行输入即可)
scrapy crawl douban -o douban.csv
(注:这里我们不需要修改pipeline管道,也不需要去修改settings里面的pipeline信息,更不需要去让settings里面的pipeline信息生效)
6.将爬取到的数据存储在excel表中。
(1)安装openpyxl库
pip install openpyxl
(2)打开pipeline.py,该文件的功能是【接收数据,处理数据—保存到数据】,在该文件中首先导入openpyxl,然后存储数据。
import openpyxl
7.将爬取到的数据存储在mysql中
(1)安装pymysql 库
pip install pymysql
(2)在mysql中创建一个专门用于爬虫的数据库spider,然后在spider下建表。
create database spider;
use spider;
create table top_movie (
movie_id int unsigned auto_increment comment '编号',
movie_name varchar(200) not null comment '电影名',
rating varchar(200) not null comment '评分',
movie_subject varchar(200) default '' comment '电影主题',
introduce varchar(300) default '' comment '简介',
comments varchar(200) default '' comment '评论',
primary key(movie_id)
)engine=innodb comment='豆瓣电影';
(3)打开pipelines.py,该文件的功能是【接收数据,处理数据—保存到数据】,在该文件中首先导入pymysql,然后存储数据。
import pymysql
连接数据库过程中传入多个参数:数据库主机名host(默认为本地主机),数据库登录名user(默认为当前用户),数据库密码password(本地mysql的密码),要打开的数据库名称db,MySQL使用的TCP端口(默认为3306),数据库字符编码charset。
第一步,定义一个初始化对象,用于绑定管道对象,与mysql对象建立连接。
第二步,游标看作一种特殊的指针,它与某个查询结果集相关联,可以指向结果集的任意位置,可以将数据放在数组、应用程序中或其他的地方,允许用户对指定位置的数据进行处理。游标就像是鼠标一样,后续操作数据库全部靠游标,使用游标的execute命令来执行。
第三步,执行数据库命令进行数据导入。针对增删改的操作,需要提交后才会真正的保存到数据库中。
第四步,提交数据库执行,关闭数据库
(4)打开Settings.py 进行修改
结果:
csv
excel
mysql