Scrapy爬取并保存到TXT文件

在创建完成项目并创建爬虫的基础上,编写保存到TXT的项目

0.设置setting文件

1.将 ROBOTSTXT_OBEY 设置为false

2.将 ITEM_PIPELINES 打开

1.定义items.py数据容器

item是Scrapy提供的类似于字典类型的数据容器,它与字典最大的区别在于它规定了统一的数据规格样式,即具有统一性与结构性。这样既方便数据的保存与处理,也可以避免打错字段或数据不一致的情况。

import scrapy


class BaikeItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()

2.编写spiders.py

parse()方法控制爬取的链接与爬取结果的处理,通常我们在获取链接后使用 scrapy.Request(url,callback=) 方法获取网页,可以callback=后面指定解析的方法。

在解析的方法中,需要定义一个字典类型 dic={},将解析完的结果,按照items定义的容器模板,更新字典内容,并将字典返回。使用return或yield返回,返回后值被pipelines获取到。

class DemoSpider(scrapy.Spider):
    name = 'demo'
    # allowed_domains = ['mp.csdn.net']
    start_urls = ['http://www.gx211.com/collegemanage/content45_03.shtml']

    def parse(self, response):
        for i in range(45,1000):
            url='http://www.gx211.com/collegemanage/content'+str(i)+'_03.shtml'
            try:
                yield scrapy.Request(url, callback=self.parse_history)
            except:
                continue

    def parse_history(self, response):
        dic={}
        try:
            school = response.css('h1 a::text').extract()[0]
            dic['name'] = school
            yield dic
        except Exception as e:
            print(e)

3.在pipeline中处理并保存数据

定义:

open_spider(self,spider)

----爬虫开始运行时执行

close_spider(self,spider)

----爬虫关闭时执行

process_item(self,item,spider)

----在有spiders中的parse函数返回值时执行

我们在open_spider中打开一个txt文件,如果没有该文件则创建,并指定文本写入模式:

在此处指定写入的编码格式为'utf-8' (默认'gdk')

    def open_spider(self,spider):
        self.file = open('items2.txt', 'w',encoding='utf-8')

在close_spider中关闭txt文件的写入:

    def close_spider(self,spider):
        self.file.close()

在process_item中指定item中内容按照一定格式写入txt文件:

    def process_item(self, item, spider):
        try:
            res=dict(item)
            line=res['name']
            self.file.write(line+'\n')
        except:
            pass

注意:

windows默认的文件写入格式为'gdk',我们往往要改变编码才能正确写入文件,

在open方法中指定编码方式为'utf-8'是常用的防止乱码和无法写入问题方法

1.为了便于处理,我们首先要将item使用dict()转化为字典类型

2.文本默认为unicode编码,这样无法写入到txt文件中,我们需要将其转换为‘utf-8'编码

可以对unicode字符使用str()方法转化为字符串,这样可以将其写入TXT,但编码还是Unicode

可以对unicode字符使用.encode('utf-8')方法,写入TXT中打开便是中文。

由于python2对汉字不太友好,导致这部分造成了额外的麻烦

 

全部代码:

spiders/demo.py

# -*- coding: utf-8 -*-
import scrapy
import re


class DemoSpider(scrapy.Spider):
    name = 'demo'
    # allowed_domains = ['mp.csdn.net']
    start_urls = ['http://www.gx211.com/collegemanage/content45_03.shtml']

    def parse(self, response):
        for i in range(45,1000):
            url='http://www.gx211.com/collegemanage/content'+str(i)+'_03.shtml'
            try:
                yield scrapy.Request(url, callback=self.parse_history)
            except:
                continue

    def parse_history(self, response):
        dic={}
        try:
            school = response.css('h1 a::text').extract()[0]
            dic['name'] = school
            yield dic
        except Exception as e:
            print(e)

items.py

import scrapy


class BaikeItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()

pipelines.py

class BaikePipeline(object):

    def open_spider(self,spider):
        self.file = open('items2.txt', 'w')

    def close_spider(self,spider):
        self.file.close()

#item在后期使用的时候还要转换回来,他存在的意义只是防止出错导致程序中止
    def process_item(self, item, spider):
        try:
            res=dict(item)
            line=res['name']
            self.file.write(line.encode('utf-8')+'\n')
        except:
            pass

 

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用Scrapy爬取图片并保存的问题,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了Scrapy库。如果没有安装,可以通过以下命令进行安装: ``` pip install scrapy ``` 2. 创建一个新的Scrapy项目。在命令行中使用以下命令: ``` scrapy startproject project_name ``` 这将在当前目录下创建一个名为 "project_name" 的新项目文件夹。 3. 进入项目文件夹,并创建一个新的Spider。在命令行中使用以下命令: ``` cd project_name scrapy genspider spider_name example.com ``` 这将在项目中创建一个名为 "spider_name" 的新Spider,用于定义爬取网页的规则。 4. 打开生成的Spider代码文件(位于 "project_name/spiders/spider_name.py"),并添加以下代码: ```python import scrapy class MySpider(scrapy.Spider): name = 'spider_name' start_urls = ['http://www.example.com'] # 要爬取的起始URL def parse(self, response): # 在这里编写解析响应数据的代码 # 提取图片URL并发送请求进行下载 for img_url in response.css('img::attr(src)').getall(): yield scrapy.Request(url=response.urljoin(img_url), callback=self.save_image) def save_image(self, response): # 获取图片保存路径 image_path = 'path/to/save/image.jpg' # 根据需求自定义保存路径和文件名 # 保存图片 with open(image_path, 'wb') as f: f.write(response.body) ``` 在上述代码中,我们定义了一个Spider类,包含了起始URL和解析响应数据的方法。在parse方法中,我们使用CSS选择器提取图片的URL,并使用scrapy.Request发送请求进行下载。下载后的图片会通过save_image方法保存到本地。 5. 运行爬虫。在命令行中使用以下命令: ``` scrapy crawl spider_name ``` 这将启动爬虫并开始爬取网页上的图片。下载的图片将保存在您指定的路径下。 请注意,上述代码只是一个简单示例,您可能需要根据具体的网页结构和需求进行相应的修改。另外,确保您遵守网站的爬取规则并尊重版权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值