龙空技术网

Scrapy框架爬取优酷电影进阶篇

嗨学python 145

前言:

现时各位老铁们对“使用scrapy爬取豆瓣电影”都比较关心,大家都需要学习一些“使用scrapy爬取豆瓣电影”的相关内容。那么小编在网摘上收集了一些关于“使用scrapy爬取豆瓣电影””的相关文章,希望我们能喜欢,咱们一起来学习一下吧!

爬取更多的items,例如名字,主演,播放次数,电影海报,并进行多页爬取。

items.py

youkuMoiveSpider.py

pipelines.py

setting.py

当然,过程中还是出了不少bug,一部分是不同文件间的类名拼写错误(哎呀,细心细心啊)

一部分是因为python的语法不熟悉,以致于出现某些类型错误。下面挑选几个典型报错:

报错1:

将fp.write(item['moiveName']+'\t')改写成fp.write(str(item['moiveName'][0])+'\t')即可

报错2:

依然是字符串的问题,将imgName=os.path.basename(item['img'])改为imgName=os.path.basename(str(item['img'][0])),又因为优酷网站上的图片没有JPG后缀,所以加上".jpg",这样就可以用图片软件直接打开了。当然,没加时也是可以打开的,但是可能需要自己选择打开方式啦

报错3:

惭愧,这个说到底依然是字符串问题,因为item['img']返回的是数组,所以将其转成字符串就可以顺利打开啦。

将爬取结果保存为json文件

添加pipelines2json.py文件,内容如下:

同时,在setting.py文件中的ITEM_PIPELINES字典修改如下:

ITEM_PIPELINES={'youkuMoive.pipelines.YoukumoivePipeline':1,

'youkuMoive.pipelines2json.YoukumoivePipeline':2}

再次执行,就可以得到json文件啦!

将爬取结果保存为到MySQL数据库中

首先,在数据库中创建表。在CMD执行以下代码

create database scrapyDB character set 'utf8' collate 'utf8_general_Ci';

use scrapyDB;

create table moive(

id INT AUTO_INCREMENT,

moiveName char(20),

actors char(20),

views char(20),

img char(80),

primary key(id))

engine=InnoDB default charset=utf8;

查看创建的表show columns from moive;

然后,安装MySQLdb模块

本来要安装MySQL-python的,然后报错

running build_ext

building "_mysql" extension

error: microsoft visual C++ 14.0 is required

去这个网站找对应的whl安装文件,然而都是python2.7的,而我是3.6!!!

于是寻找MySQL-python的替代品,找到了PyMySQL,安装一下pip install PyMySQL

PyMySQL的用法跟MySQL-python基本上是一样的。更详细的PyMySQL用法见

最后,便是编写导入MySQL的文件pipelines2mysql.py咯

记得在setting.py添加相应的字典条目。执行爬虫脚本,再次刷新数据库,便可看到数据啦!

如此,便是本次爬虫的全部内容啦。

补充:

后来发现,如果在youkuMoiveSpider文件中,将item在extract之后用[0]提取出来,则此时的item['moiveName']便是字符串了。也许就不会有后面的如此多的bug啦。

So,建议以后在为item赋值时用以下形式:item['moiveName']=sub.css("ul.info-list li.title a::attr(title)").extract()[0],应该对大部分情况很适用。

标签: #使用scrapy爬取豆瓣电影