前言:
现时各位老铁们对“使用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爬取豆瓣电影