scrapy

1、创建一个项目

scrapy startproject mySpider

2、生成一个爬虫

scrapy genspider itcast itcast.cn  # scrapy genspider <爬虫的名称><允许的域名> 

爬虫文件的介绍
1、三个参数
name
allowed_domains 设置起始点url,我们只要设置就好,通常会自动创建
start_urls
2、一个方法
parse方法 解析方法,通常用于起始url进行解析

        for node in node_list:
            temp = {}
            # xpath方法放回的是选择器对象列表,.extract()用于从选择器对象中提取数据
            # .extract()和.extract()_first 如果xpath返回的为空时就不会报错,
            # 但是如果返回的结果为多个时就不能使用.extract()__first
            temp['name'] = node.xpath('./h3/text()')[0].extract()
            temp['title'] = node.xpath('./h4/text()')[0].extract()
            temp['desc'] = node.xpath('./p/text()')[0].extract()

            yield temp
            # print(temp)

3、提取数据

一、根据网站结构在spider中实现数据采集相关内容
二、scrapy的作用
①:scrapy.Spider爬虫类中必须有名为parse的解析
②:如果网站结构层次比较复杂,也可以自定义其他解析函数
③:在解析函数中提取的url地址如果要发送请求,则必须属于allowed_domains范围内,但是start_urls中的url地址不受这个限制,我们会在后续的课程中学习如何在解析函数中构造发送请求
④:启动爬虫的时候注意启动的位置,是在项目路径下启动
⑤:parse()函数中使用yield返回数据,注意∶解析函数中的yield能够传递的对象只能是:Baseltem,Request, dict,None
2、定位元素以及提取数据、属性值的方法

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

1.response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
2.额外方法extract0:返回一个包含有字符串的列表
3.额外方法extract_first():返回列表中的第一个字符串,列表为空没有返回None
3 response响应对象的常用属性
response.url:当前响应的url地址
response.request.url:当前响应对应的请求的url地址response.headers:响应头
response.reauests.headers:当前响应的请求头

4.保存数据

使用命令爬取数据并保持。
在这里插入图片描述

使用pipeline进行数据后续处理和保存

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

import json
class ItcastPipeline():
#爬虫文件中提取数据的方法每yield一次item,就会运行一次该方法为固定名称函数
def process_item(self, item, spider):
	print(item)
	return item

2、在settings.py配置启用管道
工TEM_PIPELINES = i
" myspider.pipelines.ItcastPipeline’ : 488

class QuotesPipeline:

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

    def process_item(self, item, spider):
        # print('itcast:',item)
        # 将字典数据序列化
        # ensure_ascii=False 转换为中文
        json_data = json.dumps(item,ensure_ascii=False) + ',\n'  # 将字典格式转换为json格式

        # 将数据写入文件
        self.file.write(json_data)
        return item

    def __del__(self):
        self.file.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值