爬虫Scrapy框架学习(一)

  • 首先要学会如何构造一个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

猜你喜欢

转载自blog.csdn.net/hot7732788/article/details/88719043