专栏首页JavaEdgeScrapy入门与实践(二) - helloworld

Scrapy入门与实践(二) - helloworld

创建项目

在开始爬取之前,必须创建一个新的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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Scrapy入门与实践(一) - 简介适用人群概览安装介绍mongodb 安装

    JavaEdge
  • Shiro实战(五) - 会话管理

    Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器Tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件...

    JavaEdge
  • Memcached内存管理源码分析

    memcached内存管理的模型与作业本“画格子给我们往格子里面写字”的逻辑很像,一个个作业本就是我们的内存空间,而我们往里写的字就是我们要存下来的数据,所以分...

    JavaEdge
  • 小爬虫之爬取淘宝MM1.技术路线2.目标3.分析4.运行结果5.源码

    1.技术路线 python3 urllib re mysql sqlyog 2.目标 爬取淘女郎的MM信息 3.分析 网站:https://mm.taobao....

    JasonhavenDai
  • HTTP协议之URL语法

    URL提供了一种对任意的一种互联网资源定位的手段。但是这些资源是可以通过不同的方案来(比如,HTTP,FTP,SMTP)进行访问的,因此URL的语法会随着方案的...

    魔王卷子
  • nodejs之重定向

    重定向指的是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

    无邪Z
  • Egret3D之初体验

    Ⅰ,Egret3D官方文档 : https://developer.egret.com/cn/docs/3d/docs/guide/getting-starte...

    py3study
  • 程序员的江湖:从黑木崖到回龙观

    毕业时,带着一本《深入浅出MFC》和一张磨损严重的键盘去了北方的燕京,号称:一书一键闯天涯。

    康亮
  • Python爬虫——电影top榜

    图片的实际是data-src,而不是src需要实际看一下请求数据返回的response值

    羊羽shine
  • Docker 实战和基础架构

    Maybe you will see a few extra lines if your Docker install is brand new.

    Jintao Zhang

扫码关注云+社区

领取腾讯云代金券