[python]Scrapy爬取豆瓣电影top250排行榜相关信息

请完成爬虫程序的编写,依次实现对电影名称(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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值