scrapy初试
scrapy初试
创建项目
打开
cmd,在终端输入scrapy startproject tutorial,这里将在指定的文件夹下创建一个scrapy工程
其中将会创建以下的文件:
scrapy.cfg: 项目的配置文件tutorial/: 该项目的python模块。之后您将在此加入代码。tutorial/items.py: 项目中的item文件.tutorial/pipelines.py: 项目中的pipelines文件.tutorial/settings.py: 项目的设置文件.tutorial/spiders/: 放置spider代码的目录.
定义item
Item是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。
类似在
ORM中做的一样,您可以通过创建一个scrapy.Item类, 并且定义类型为scrapy.Field的类属性来定义一个Item。 (如果不了解ORM, 不用担心,您会发现这个步骤非常简单)
首先根据需要从
dmoz.org获取到的数据对item进行建模。 我们需要从dmoz中获取名字,url,以及网站的描述。 对此,在item中定义相应的字段。编辑tutorial目录中的items.py文件:
import scrapy
class DmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
一开始这看起来可能有点复杂,但是通过定义item, 您可以很方便的使用Scrapy的其他方法。而这些方法需要知道您的item的定义.
编写第一个爬虫
在工程的根目录下打开终端输入
scrapy genspider demo douban.com
这里的demo是spders文件下的主要py文件
douban.com是要爬取的域名,会在demo.py中的allowed_domains中显示,主要的功能就是限制爬取的urlspider代码中内容解析
name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。parse()是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的Request对象。
以下是spider目录下的demo.py的代码
import scrapy
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)
spider的爬取
进入工程的根目录下打开终端输入:
scrapy crawl dmoz
spider中的数据存取
在工程的根目录下打开终端输入
scrapy crawl dmoz -o items.json
这里是将数据存储到json文件中
如果觉得作者写的好,有所收获的话,点个关注,推荐一波,文章首发于公众号!!!

浙公网安备 33010602011771号