创建项目
利用scrapy命令行创建一个名为“tutorial”的项目
scrapy startproject tutorial
生成的目录格式为
tutorial/
scrapy.cfg #项目配置文件
tutorial/
__init__.py
items.py
pipelines.py
settings.py
spiders/ #放置spider代码的目录.
__init__.py
...
定义Item
Item是保存爬取到的内容的容器,就像是Python中的dict
类似在ORM中做的一样,可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个Item。
Sample of /tutorial/items.py
import scrapy
import time
#LianjiaItem继承自scrapy.Item
class LianjiaItem(scrapy.Item):
#所有想要爬取的字段都是scrapy.Field类型
_id = scrapy.Field()
title = scrapy.Field()
acreage = scrapy.Field()
cityCode = scrapy.Field()
districtName = scrapy.Field()
face = scrapy.Field()
floor_state = scrapy.Field()
houseSellId = scrapy.Field()
latitude = scrapy.Field()
longitude = scrapy.Field()
hall = scrapy.Field()
metroRemark = scrapy.Field()
plateName = scrapy.Field()
propertyName = scrapy.Field()
referAvgPrice = scrapy.Field()
room = scrapy.Field()
showPrice = scrapy.Field()
unitPrice = scrapy.Field()
title = scrapy.Field()
tags = scrapy.Field()
crawl_date = scrapy.Field()
编写爬虫(Spider)
为了创建一个Spider,必须继承 scrapy.Spider 类, 且定义以下三个属性:
- name: 用于区别Spider。 该名字必须是唯一的,不可以为不同的Spider设定相同的名字。
- start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
-
parse()
是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request
对象。
Sample of Spider.py
import scrapy
class LianjiaSpider(scrapy.spiders.Spider):
name = "lianjia_spider"
allowed_domains = ["lianjia.com"]
start_urls = ["http://bj.lianjia.com/fangjia/" ]
def parse(self, response):
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)
Scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request 对象,并将 parse
方法作为回调函数(callback)赋值给了Request。
Request对象经过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。
网友评论