1. 构建scrapy项目

scrapy startproject ['项目名']
  • 在spiders下生成文件

    cd spiders
    scrapy genspider douban_spider ['域名']

2. 明确目标

明确需要抓取哪些内容,在items.py中定义数据结构:

import scrapy
class DoubanItem(scrapy.Item):
# 序号
serial_number = scrapy.Field()
# 电影名
movie_name = scrapy.Field()
# 介绍
introduce = scrapy.Field()
# 星级
star = scrapy.Field()
# 评论
evaluate = scrapy.Field()
# 描述
describe = scrapy.Field()

3. spider文件编写

打开spider.py文件,默认会有三个参数:

class DoubanSpiderSpider(scrapy.Spider):
# 爬虫名
name = 'douban_spider'
# 允许的域名,超出该域名的链接不会进行抓取
allowed_domains = ['movie.douban.com']
# 入口url
start_urls = ['https://movie.douban.com/top250'] def parse(self, response):
pass

def parse方法中进行内容解析:

def parse(self, response):
print(response.text)

4. 启动scrapy项目

  • 命令行中启动

    # douban_spider 即spider.py中的爬虫名
    scrapy crawl douban_spider

    报错403的原因:user_agent设置不对,去settings.py中设置:

    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
  • 在pycharm中启动

    创建一个main.py文件:

    from scrapy import cmdline
    
    if __name__ == '__main__':
    cmdline.execute('scrapy crawl douban_spider'.split())

5. 编写解析方式

如何解析是写在def parse(self, response)中。

  • xpath提取内容

    需要去学习下xpath的语法

    movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
  • 根据之前的item.py来封装对象

    from douban.items import DoubanItem
  • 具体代码

    # 先使用xpath语法来选取,然后后跟text()函数获取内容
    movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
    for item in movie_list:
    douban_item = DoubanItem()
    douban_item['serial_number'] = item.xpath(".//div[@class='item']//em/text()").extract_first()
    douban_item['movie_name'] = item.xpath(".//div[@class='info']//a/span/text()").extract_first()
    content = item.xpath(".//div[@class='bd']/p[1]/text()").extract()
    content_set = list()
    for i_content in content:
    tmp = ""
    for temp in i_content.split():
    tmp += temp
    content_set.append(tmp)
    douban_item['introduce'] = content_set
    douban_item['star'] = item.xpath(".//div[@class='star']/span[2]/text()").extract_first()
    douban_item['evaluate'] = item.xpath(".//div[@class='star']/span[4]/text()").extract_first()
    douban_item['describe'] = item.xpath(".//div[@class='bd']/p[2]/span/text()").extract_first()
    # 重点
    yield douban_item
  • 对象解析完毕后务必要调用yield来进行提交

    yield douban_item

6. 翻页实现

上面的代码只能读取当前页的信息,需要去抓取下一页的链接,然后再次yield

# 取下一页链接
next_link = response.xpath("//span[@class='next']/link/@href").extract()
# 如果不为最后一页
if next_link:
next = next_link[0]
yield scrapy.Request("https://movie.douban.com/top250" + next, callback=self.parse)

7. 保存输出

在命令的后边加入-o参数即可,支持json(unicode编码保存)、csv等多个格式

scrapy crawl douban_spider -o test.json

scrapy初体验的更多相关文章

  1. Scrapy 初体验

    开发笔记 Scrapy 初体验 scrapy startproject project_name 创建工程 scrapy genspider -t basic spider_name website. ...

  2. Scrapy初体验(一) 环境部署

    系统选择centOs 7,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, ...

  3. scrapy初体验 - 安装遇到的坑及第一个范例

    scrapy,python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.scrapy用途广泛,可以用于数据挖掘.监测和自动化测试.scrapy的安装稍 ...

  4. Scrapy的初体验

    上一节安装了python2和python3的开发环境 首先第一步:进入开发环境,workon article_spider 进入这个环境: 安装Scrapy,在安装的过程中出现了一些错误:通常这些错误 ...

  5. python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨

    python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...

  6. [转]Python爬虫框架--pyspider初体验

    标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报  分类: Python(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  7. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  8. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  9. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

随机推荐

  1. Xbatis:SpringBoot 数据管理框架

    目录 安装 下载源码 编译源码 添加依赖 数据表 数据源 Xbatis XbatisManager Database/Table/Column Column Table Database Create ...

  2. JQuery选择器的使用和分类

    jQuery选择器 id选择器格式 $("#box") //获取标签里的id是box的标签 类选择器格式 $(".a") //获取标签里的类名是a的标签 标签选 ...

  3. C#语言类型

    讨论 所有类型在,值类型,引用类型用new创建,值类型由编译器自动补全 int等引用类型是轻量化结构更像是结构体 值类型在栈中,引用类型在堆中 所有类型由类派生,可以说每个是对象,也可以不是 由于.N ...

  4. 哪些是GET请求,哪些是POST请求

    GET请求: 1,form标签 method=get 2,a标签 3,link标签引入css 4,Script标签引入js文件 5,img标签引入图片 6,iframe引入html页面 7,在浏览器地 ...

  5. 事件驱动架构在 vivo 内容平台的实践

    一.什么是事件驱动架构 当下,随着微服务的兴起,容器化技术的发展,以及云原生.serverless 概念的普及,事件驱动再次引起业界的广泛关注. 所谓事件驱动的架构,也就是使用事件来实现跨多个服务的业 ...

  6. /usr/local /opt

    Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统级的目录,可以理解为C:/Windows/, /usr/lib理解为C:/Windows/System32. ...

  7. [HZOI] 山海经 题解

    0.题目大意 给出一个序列,每次查询一个区间的最大子段和的端点和值.序列长度 \(n \le 10^{5}\) . 1.思路 显然应该使用线段树.题目要求每次求一个区间的最大子段和,那么在线段树节点中 ...

  8. C++ STL 容器概述

    在STL编程中,容器是经常用到的一种数据结构,在C++标准库中,容器分为: 序列式容器 关联式容器 二者本质区别在于,序列式容器是通过元素在容器中的位置进行顺序存储和元素访问.关联容器则是通过键[ke ...

  9. uni微信小程序优化,多个分包在用的公共代码该放在哪?

    公共的代码包括公用的vue组件和js代码,从维护性的角度来说应该放到主包才对, 但是主包有大小限制,如果把2个分包都在用的代码放到主包里面那2M很快就满了. 所以该放在哪?我的方案是从维护的角度放在主 ...

  10. 普通web项目一直无法访问页面,直接报404

    错误:普通web项目一直无法访问页面,直接报404 原因:写了一个过滤乱码的类: 而在类上加了WebServlet注解,其实应该是WebFilter注解, 总结:基础不扎实,有些东西只会用,而不知道原 ...