Scrapy入门案例——爬取豆瓣电影
2018-08-02 本文已影响18人
徐同学呀
请谨记如下三条命令:
scrapy startproject xxx 创建scrapy项目
scrapy genspider xxx "xxx.com" 创建爬虫spider,名字不能和项目名一样
scrapy crawl xxx 运行某个爬虫项目
首先scrapy startproject douban
建立项目,其次切换到spiders目录下,scrapy genspider douban_movie
建立爬虫。
我们要爬取的数据很简单,是豆瓣电影排行榜。之所以说它简单是因为它请求返回的数据我们可以转换成规整的json列表,并且获取分页链接也很简单。
我们只获得title和url的信息。明确了请求目标后,我们开始编写items
import scrapy
class DoubanItem(scrapy.Item):
title = scrapy.Field()
url = scrapy.Field()
其次编辑spiders下的爬虫文件
# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem
import json
class DoubanMovieSpider(scrapy.Spider):
name = 'douban_movie'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20']
offset = 0
def parse(self, response):
item = DoubanItem()
content_list = json.loads(response.body.decode())
if (content_list == []):
return
for content in content_list:
item['title'] = content['title']
item['url'] = content['url']
yield item
self.offset += 20
url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start='+str(self.offset) + '&limit=20'
yield scrapy.Request(url=url,callback=self.parse)
response.body
获得数据是<class 'bytes'>
型,我们需要转换为str型,response.body.decode()
。然后通过json.loads()
将字符串装换成json 列表,列表里的元素其实就是dict型。
然后保存数据,编辑pipelines.py
import json
class DoubanPipeline(object):
def open_spider(self,spider):
self.file = open("douban.json","w")
self.num = 0
def process_item(self, item, spider):
self.num+=1
content = json.dumps(dict(item),ensure_ascii=False)+'\n'
self.file.write(content)
return item
def close_spider(self,spider):
print('一共保存了'+str(self.num)+'条数据')
self.file.close()
在运行前需要设置settings.py
#打开这两个注释:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.15 Safari/537.36' #模拟浏览器
ITEM_PIPELINES = {
'douban.pipelines.DoubanPipeline': 300,
} #编辑好管道要记得注册管道
#ROBOTSTXT_OBEY = True 注释掉robot协议,不然会报错
项目源码:
https://gitee.com/stefanpy/Scrapy_projects/tree/dev/douban
推荐Scrapy学习网站:http://www.scrapyd.cn/