python中的scrapy爬虫框架入门使用

本文详细介绍了如何使用Scrapy创建项目、编写爬虫,通过XPath解析并提取网页数据,以及利用Pipelines进行数据持久化。重点讲解了`scrapycrawl`命令的使用、XPath操作、响应对象属性和管道的配置,适合初学者理解数据抓取流程。
摘要由CSDN通过智能技术生成

项目开发流程

创建项目
创建爬虫
提取数据
保存数据

创建scrapy框架项目

scrapy startproject <项目名称>
在这里插入图片描述

创建爬虫

通过命令创建出爬虫文件,爬虫文件为主要的代码作业文件,通常一个网站的爬取动作都会在爬虫文件中进行编写。

命令:
项目路径下执行
scrapy genspider <爬虫名字> <允许爬取的域名>

爬虫名字: 作为爬虫运行时的参数
允许爬取的域名:为对于爬虫设置的爬取范围,设置之后用于过滤要爬取的url,如果爬取的url与允许的域不通则被过滤掉。
cd myspider
scrapy genspider itcast itcast.cn
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

prase函数作用为对url访问后返回的对象进行的操作

运行scrapy

scrapy crawl <爬虫名称>
在项目目录下执行scrapy crawl itcast运行爬虫文件
在这里插入图片描述

运行结果:
在项目目录下生成了itcast.html文件
在这里插入图片描述

定位元素以及提取数据、属性值的方法

解析并获取scrapy爬虫中的数据: 利用xpath规则字符串进行定位和提取

  1. response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
  2. 额外方法extract():返回一个包含有字符串的列表
  3. 额外方法extract_first():返回列表中的第一个字符串,列表为空没有返回None

response响应对象的常用属性

  • response.url:当前响应的url地址
  • response.request.url:当前响应对应的请求的url地址
  • response.headers:响应头
  • response.requests.headers:当前响应的请求头
  • response.body:响应体,也就是html代码,byte类型
  • response.status:响应状态码

例子

import scrapy
class ItcastSpider(scrapy.Spider):
    name = 'itcast'
    allowed_domains = ['itcast.cn']
    start_urls = ['https://www.xxxx.cn/channel/teacher.shtml#ajavaee']

    def parse(self, response):
        #获取所有教师节点
        node_list=response.xpath('//div[@class="li_txt"]')
        print(len(node_list))

        #遍历教师节点列表,在每个教师节点中提取数据
        for node in node_list:
            temp={}
            #xpath方法返回的是选择器对象列表
            #scrapy框架中xpath返回的与平常的xpath不一样
            #平时这个xpath语句会直接返回字符串列表,但是在scrapy框架中会返回一个selector对象列表,需通过索引取出selector对象,
            #在通过特有的方法取selector对象的值
            temp['name']=node.xpath('./h3/text()').extract_first()
            temp['title'] = node.xpath('./h4/text()').extract_first()
            temp['desc'] = node.xpath('./p/text()')[0].extract()
            #extract:提取selector对象中的值,extract_first():提取第一个selector对象中的值
            #xpath结果为只有一个值的列表,可以使用extract_first(),如果为多个值则使用extract
            yield temp

分析:
1.设置start_urls访问的url,进行访问并返回
2.在响应返回的数据中通过xpath筛选出需要的节点返回一个selector对象列表
3.通过循环遍历列表中的每个selector对象,用xpath对每个selector对象进行筛选并返回一个新的selector对象列表
4.用extract或者extract_first()对每个新的selector对象进行数据提取

保存数据

利用管道pipeline来处理(保存)数据

在pipelines.py文件中定义对数据的操作
  1. 定义一个管道类
  2. 重写管道类的process_item方法
  3. process_item方法处理完item之后必须返回给引擎

步骤:

爬虫文件中parse函数返回的数据将传送到项目目录下pipelines.py文件的管道类中
在这里插入图片描述
在settings.py中删除注释,启用管道类
名字含义依次是:项目名称,pipelines.py文件,TestSpiderPipeline管道类名
300为管道执行的顺序
在这里插入图片描述
执行后查看是否启用管道类
在这里插入图片描述
在管道类TestSpiderPipeline中对爬虫文件返回的数据进行保存操作

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

# useful for handling different item types with a single interface
import json

from itemadapter import ItemAdapter
class TestSpiderPipeline:

    def __init__(self):
        self.file=open('itcast.json','w')

    def process_item(self, item, spider):

        #将字典数据序列号
        json_data=json.dumps(item) +',\n'
        #将数据写入文件
        self.file.write(json_data)

        return item

    def __del__(self):
        self.file.close()

保存的数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值