爬虫第五课---scrapy(一)环境的安装,框架的基本介绍,运行流程和小案例

版权声明:只要点赞,这篇文章就是你的。 https://blog.csdn.net/weixin_36691991/article/details/89295494

一、安装环境
scrapy 安装
win安装
1.安装Twisted   https://www.lfd.uci.edu/~gohlke/pythonlibs/
Twisted‑18.9.0‑cp36‑cp36m‑win32.whl  cp36 是python版本win32是python的位数
2.命令安装
pip install Twisted‑18.9.0‑cp36‑cp36m‑win32.whl
3.pip install scrapy

pip list 查看已经安装的第三方库
二、基本介绍
之前学习的请求库:urllib  urllib3 requeste  解析库:re lxml Bs4(BeautifulSoup4)
scripy是纯python开发的一个高效结构化的网页抓取框架
三、命令
1.全局命令
 scrapy startproject 创建项目

2.项目命令

scrapy genspider [options] <name> <domain>创建爬虫文件
scrapy genspider baidu_spider baidu.com
scrapy crawl 运行爬虫
scrapy list 查看当前项目可运行的爬虫

四、注意事项

此框架默认遵守robots协议
可以在settings中修改ROBOTSTXT_OBEY为false

五、运行流程,看一开始的图

scrapy 运行流程
engine(引擎) spider(爬虫文件)  engine(引擎)  scheduler(调度器)  downloader(下载器) engine(引擎) spider(爬虫文件) tiem(管道)

六、

实际案例
第一步 创建项目 scrapy startproject TanzhouSpider
第二步 创建spider文件 scrapy genspider tz_spider shiguangkey.com
第三步 编写items文件,知道自己需要抓取的数据
第四步 解析数据,提取Request或者items
第五步 保存数据 

用的到基础知识点:
yield 生成器
回调函数

isinstance 判断实例类型
zip 方法两个列表,返回一个大的列表,元素是一一对应的元组

spider文件中的内容:

# -*- coding: utf-8 -*-
import scrapy
from ..items import MyspiderItem


class TzSpiderSpider(scrapy.Spider):
    name = 'tz_spider'
    # allowed_domains = ['shiguangkey.com']
    start_urls = ['http://ke.qq.com/course/list?mt=100{}'.format(i) for i in range(1,7)]

    def parse(self, response):
        # 解析数据
        # print(response.url+'========')
        titles = response.xpath('//h4[@class="item-tt"]/a/text()')
        # print('title',title)#匹配出来的是对象
        titles = titles.extract()
        # print(title)#匹配出来的是列表
        school_names = response.xpath('//span[@class="item-source"]/a/text()')
        # print('school_name',school_name)
        school_names = school_names.extract()
        items = MyspiderItem()
        for title, school_name in zip(titles, school_names):
            items['title'] = title
            items['school_name'] = school_name
            yield items
            #返回item对象

        # 跟进链接  翻页
        next_url = response.xpath('//a[@class="page-next-btn icon-font i-v-right"]/@href').extract()
        print(next_url)
        if next_url:
           yield scrapy.Request(url=next_url[0],callback=self.parse)
        #数据写入在pipelines.py中

items.py中的内容:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class MyspiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # pass
    title = scrapy.Field()
    school_name = scrapy.Field()

pipelines.py中的内容:

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import json
class MyspiderPipeline(object):
    def process_item(self, item, spider):
        '''
        这个方法是必须实现的
        :param item:
        :param spider:
        :return:
        '''
        with open('item.json','a+',encoding='utf-8') as f:
            # f.write(json.dumps(item)+'\n')#老写发
            f.write(str(item)+'\n')#新写法
        return item
    #激活才可以写入到文件,激活在settings中的67行

猜你喜欢

转载自blog.csdn.net/weixin_36691991/article/details/89295494
今日推荐