2021SC@SDUSC
这篇博客将讲述如何写一个入门级Spider
一.定义ItemItem 是保存爬取到的数据的容器,其使用方法和python字典类似。
可以让自定义的类继承scrapy.Item,并且定义类型为scrapy.Field的类属性来定义一个Item
下面是定义一个CnblogItem类的代码分析
#导库
import scrapy
#继承scrapy.Item
class CnblogItem(scrapy.Item):
#名字
title = scrapy.Field()
#url
link = scrapy.Field()
二.写一个入门级的Spider
创建一个Spider,必须继承scrapy.Spider类,并定义一些属性
| name | 用于区别Spider。 该名字必须是唯一的,不可以为不同的Spider设定相同的名字 |
| allowed_domains | 包含了spider允许爬取的域名(domain)列表(list)。 |
| start_urls | 包含了Spider在启动时进行爬取的url列表。 |
| parse(response) | parse 负责处理response并返回处理的数据以及(/或)跟进的URL。 |
下面是cnblog_spider.py的部分代码分析
首先导包,定义类继承scrapy.Spider,然后设置属性
爬虫名是cnblog_spider
域名是cnblogs.com
这里的url和offset之后做了一个字符串拼接,所以实际访问的url是
https://www.cnblogs.com/sitehome/p/1
import scrapy
from cnblog.items import CnblogItem
class CnblogSpiderSpider(scrapy.Spider):
# 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
name = "cnblog_spider"
#包含了spider允许爬取的域名(domain)列表(list)
allowed_domains = ["cnblogs.com"]
url = 'https://www.cnblogs.com/sitehome/p/'
offset = 1
# URL列表 start_urls 包含了Spider在启动时进行爬取的url列表。
# https://www.cnblogs.com/sitehome/p/1
start_urls = [url+str(offset)]
然后定义parse(response)方法
这里注意在python中类方法必须有一个额外的第一个参数名称, 按照惯例它的名称是 self;
self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数;
#python类中方法的定义,注意要带self
def parse(self, response):
#定义item
item = CnblogItem()
#使用xpath搜索
item['title'] = response.xpath('//a[@]/text()').extract()
item['link'] = response.xpath('//a[@]/@href').extract()
yield item
print("第{0}页爬取完成".format(self.offset))
if self.offset < 10: #爬取到第几页
self.offset += 1
url2 = self.url+str(self.offset) #拼接url
print(url2)
yield scrapy.Request(url=url2, callback=self.parse)
有关yield,xpath以及其他parse()代码的分析博主将在下一篇博客讲述。



