-
首先要学会如何构造一个Scrapy爬虫项目,在windows环境下,在命令行内输入
scrapy startproject 项目名称
来创建一个Scrapy项目 -
然后使用
scrapy genspider itcast "itcast.cn”
来生成一个爬虫,其中itcast为爬虫名,后面的网址为限制爬虫的范围,这样就不会存在爬取其他网址从而获取杂乱信息的现象发生。 -
运行爬虫框架的命令行指令为
scrapy crawl itcast
最后的参数与爬虫名一致即可运行响应的爬虫程序。- 项目结构如下
- 项目结构如下
-
生成的itcast.py文件的内容如下
# -*- coding: utf-8 -*-
import scrapy
class ItcastSpider(scrapy.Spider):
name = 'itcast' #爬虫名
allowed_domains = ['itcast.cn'] #允许爬取的范围
start_urls = ['http://www.itcast.cn/channel/teacher.shtml']#最开始请求的url地址
def parse(self, response):#必须重写
#处理start_url地址对应的响应
# ret1 = response.xpath("//div[@class='tea_con']//h3/text()").extract()
# print(ret1)
#分组
li_list = response.xpath("//div[@class='tea_con']//li")
for li in li_list:
item = {}
item["name"] = li.xpath(".//h3/text()").extract_first() #两者都可以(当xpath地址写错了的时候会获取NONE值)
item["title"] = li.xpath(".//h4/text()").extract()[0]
# print(item)
yield item #变成一个生成器-减少内存的占用
- 如果需要将返回在输出窗中的警告去除,可以在setting中进行如下设置,便可以只显示warning以上的警告
LOG_LEVEL = "WARNING"#设置此项之后只会显示warning和其以上的日志
- 通过yield的输出形式将爬取到的数据输出到pipeline中(yield生成的是一个生成器,且item为字典形式,不可以为列表-列表数据无法传输)
yield item #变成一个生成器-减少内存的占用
- pipeline规定对输出数据进行操作时需要将setting中的管道定义注释打开,并定义管道距离,管道距离短的先进行数据处理,
-ITEM_PIPELINES = { 'SCRAPY.pipelines.ScrapyPipeline1': 300,#定义距离的远近,当多个pipeline运行时距离近的数据越先进去距离近的管道 'SCRAPY.pipelines.ScrapyPipeline': 200, }
注意:在pipeline.py中对输出数据进行处理时必须要return数据,不然后续管道无法获取数据
class ScrapyPipeline(object):
def process_item(self, item, spider):#方法名固定
item["hello"] = "world"
return item
class ScrapyPipeline1(object):
def process_item(self, item, spider):
print(item)
return item