前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scrapy入门与实践(二) - helloworld

Scrapy入门与实践(二) - helloworld

作者头像
JavaEdge
发布2019-02-15 09:52:13
1.1K0
发布2019-02-15 09:52:13
举报
文章被收录于专栏:JavaEdgeJavaEdge

创建项目

在开始爬取之前,必须创建一个新的Scrapy项目。 进入打算存储代码的目录中,运行下列命令:

scrapy startproject tutorial

该命令将会创建包含下列内容的 tutorial 目录

  • tutorial/ 该项目的python模块。之后将在此加入代码
  • scrapy.cfg 项目的配置文件
  • items.py 项目中的item文件
  • pipelines.py 项目中的pipelines文件
  • settings.py 项目的设置文件
  • spiders/ 放置spider代码的目录

1 定义Item

保存爬取到的数据的容器 使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

类似在ORM中做的一样,可通过创建一个 [scrapy.Item]类, 并且定义类型为 [scrapy.Field]的类属性来定义一个Item

首先根据需要从dmoz.org获取到的数据对item进行建模。 我们需要从dmoz中获取名字,url,以及网站的描述。 对此,在item中定义相应的字段 编辑 tutorial 目录中的 items.py 文件

通过定义item, 可很方便的使用Scrapy的其他方法。而这些方法需要知道item的定义

2 编写第一个爬虫

Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类

其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 [item] 的方法。

为了创建一个Spider,您必须继承 [scrapy.Spider]类, 且定义以下三个属性:

[name]

用于区别Spider, 该名字必须是唯一的,定义spider名字的字符串(string) spider的名字定义了Scrapy如何定位(并初始化)spider,所以其必须是唯一的 不过可生成多个相同的spider实例(instance),这没有任何限制。 name是spider最重要的属性,且必须定义

如果该spider爬取单个网站(single domain),一个常见的做法是以该网站(domain)(加或不加 后缀 )来命名spider 例如,如果spider爬取 mywebsite.com ,该spider通常会被命名为 mywebsite

[start_urls]

包含了Spider在启动时进行爬取的url列表 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取 URL列表。当没有制定特定的URL时,spider将从该列表中开始进行爬取。 因此,第一个被获取到的页面的URL将是该列表之一。 后续的URL将会从获取到的数据中提取。

[parse()]

spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 [Request]对象

明确目标(mySpider/items.py)

我们打算抓取 http://www.itcast.cn/channel/teacher.shtml 网站里的所有讲师的姓名、职称和个人信息。

打开 mySpider 目录下的 items.py。

Item 定义结构化数据字段,用来保存爬取到的数据,有点像 Python 中的 dict,但是提供了一些额外的保护减少错误。

可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个 Item(可以理解成类似于 ORM 的映射关系)。

接下来,创建一个 ItcastItem 类,和构建 item 模型(model)。

制作爬虫 (spiders/itcastSpider.py)

爬虫功能要分两步:

1. 爬数据

在当前目录下输入命令,将在mySpider/spider目录下创建一个名为itcast的爬虫,并指定爬取域的范围

scrapy genspider itcast "itcast.cn"

  • 打开 mySpider/spider目录里的 itcast.py,默认增加了下列代码

也可以由我们自行创建itcast.py并编写上面的代码,只不过使用命令可以免去编写固定代码的麻烦

要建立一个Spider, 你必须用scrapy.Spider类创建一个子类,并确定三个强制的属性 和 一个方法。

  • name = "" :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。
  • allow_domains = [] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。
  • start_urls = () :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
  • parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:

负责解析返回的网页数据(response.body),提取结构化数据(生成item) 生成需要下一页的URL请求。 将start_urls的值修改为需要爬取的第一个url

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建项目
  • 1 定义Item
  • 2 编写第一个爬虫
    • [name]
      • [start_urls]
        • [parse()]
          • 明确目标(mySpider/items.py)
            • 制作爬虫 (spiders/itcastSpider.py)
              • 1. 爬数据
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档