Scrapy入门案例——爬取豆瓣电影

请谨记如下三条命令:

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/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构笔记

scrapy爬虫框架(三):爬取壁纸保存并命名

首先我们先分析网页结构,打开网址:http://desk.zol.com.cn/dongman/1920x1080/

14420
来自专栏有趣的Python和你

python爬虫之微打赏(scrapy版)创建项目itemssettingsweidashangspider保存为csv文件

18440
来自专栏一“技”之长

Git命令集十四——抓取命令 原

11220
来自专栏我是攻城师

深入理解Java8并发工具类StampedLock

StampedLock类是JDK8里面新增的一个并发工具类,这个类比较特殊,在此之前我们先简单的了解一下关于数据库或者存储系统的锁策略和机制。

19220
来自专栏程序员的碎碎念

JS动态加载以及JavaScript void(0)的爬虫解决方案

对于使用JS动态加载, 或者将下一页地址隐藏为 JavaScriptvoid(0)的网站, 如何爬取我们要的信息呢?

19820
来自专栏章鱼的慢慢技术路

Golang语言下使用Protocol Buffer教程

Protobuf是Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式...

14720
来自专栏桥路_大数据

Python3使用Scrapy快速构建第一款爬虫

37470
来自专栏Python爬虫与算法进阶

Hi,这里是我的爬虫笔记

平时有个习惯,会把自己的笔记写在有道云里面,现在做个整理。会长期更新,因为我是BUG制造机。 解析 xpath提取所有节点文本 <div id="test3"...

37050
来自专栏用户3030674的专栏

GreenDao教程1

最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的。直接面向对象的,可以通过对对象的操作,实现数据的存储。

12930
来自专栏惨绿少年

磁盘管理 之 parted命令添加swap,文件系统

第1章 磁盘管理 1.1 必须要了解的。 1.1.1 ps aux 命令中 RSS 与VSZ的含义 rss 进程占用的物理内存的大小 单位:kb ;   ...

29700

扫码关注云+社区

领取腾讯云代金券