【scrapy爬虫】csvfeed模板爬取csv文件

手动反爬虫:原博地址

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

如若转载,请标明出处,谢谢!

1. 文件网址

首先需要找到要爬取的文件对应的地址,scrapy官网查找过没有找到相关的示例,于是就进行了百度搜索,这里借鉴CSDN中Programer Cat 博主的数据,对应的数据网址为:特派员数据.csv
在这里插入图片描述

2. 项目爬取

2.1 新建项目

创建一个csvfeed_demo项目的爬虫文件夹

scrapy srartproject csvfeed_demo

cd ./csvfeed_demo #接着接入创建好的文件夹下
2.2 创建csvfeed爬虫模板

紧接着上一个指令进行操作

scrapy genspider -t csvfeed demo gzdata.gov.cn
2.3 修改items.py文件

根据要爬取的csv文件中的信息,可以发现是四列,因此就对应四个字段

import scrapy

class CsvfeedDemoItem(scrapy.Item):
    name = scrapy.Field()
    searchField = scrapy.Field()
    service = scrapy.Field()
    specialty = scrapy.Field()
2.4 修改demo.py文件

进行爬虫内容代码的编写,模板中有详细的书写示范,这里根据自己的数据格式进行改进即可

from scrapy.spiders import CSVFeedSpider
from ..items import CsvfeedDemoItem  
#注意这里导入刚刚修改的items.py文件中的类名称(模块)

class DemoSpider(CSVFeedSpider):
    name = 'demo'
    allowed_domains = ['gzdata.gov.cn']
    #文件的网址
    start_urls = ['http://gzopen.oss-cn-guizhou-a.aliyuncs.com/科技特派员.csv']
    #四个字段,注意不要随便改模板的参数,这里就是headers,改成别的变量就报错
    headers = ['name', 'SearchField', 'Service', 'Specialty'] 
    #csv文件,就是以逗号分隔的
    delimiter = ','  
    #每行的标识就是换行符
    quotechar = '\n'
    
    #这里设置一下字体的编码,不然出现乱码
    def adapt_response(self, response):
        return response.body.decode('gbk')
	
	#进行字段的数据获取,可以辅助打印输出
	#不然使用nolog参数,最后什么也没有输出
    def parse_row(self, response, row):
        i = CsvfeedDemoItem()
        try:
            i["name"] = row["name"]
            i["searchField"] = row["SearchField"]
            i["service"] = row["Service"]
            i["specialty"] = row["Specialty"]
            print("name:",row["name"])
            print("searchField:",row["SearchField"])
            print("service:",row["Service"])
            print("specialty:",row["Specialty"])
            print('\n--------------------\n')
        except Exception as e:
            print(e)
        return i
2.5 执行爬虫

命令行输入爬虫指令

scrapy crawl demo --nolog

→ 输出的结果为:
在这里插入图片描述

3. 保存文件

将爬取的内容保存至本地,这里采用txt和csv两种方式存放数据

3.1 修改settings.py文件

一定不要忘记打开pipeline管道,不然只有就算写了保存数据的代码,最后也不会生成文件
在这里插入图片描述

3.1 修改pipeline.py文件(1)

先将数据保存为txt文本数据,具体的代码如下

class CsvfeedDemoPipeline(object):
	def open_spider(self,spider):
		self.file = open('demo.txt', 'w',encoding='gbk')

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

	def process_item(self, item, spider):
		try:
			name=item['name']
			searchField = item["searchField"]
			service =item["service"]
			specialty = item["specialty"]
			self.file.write('姓名:{}, 研究领域:{}, 服务分类:{}, 专业特长:{}\n'.format(
				name,searchField,service,specialty)
			)
		except:
			pass

→ 输出的结果为:(第一行数据暂没有处理,等有时间了看一下,这里把标题也输出了)
在这里插入图片描述

3.2 修改pipeline.py文件(2)

接着就是生成csv文件,代码如下

from scrapy.exporters import CsvItemExporter
#这一部分可以看上一篇的讲解,关于csv文件的导出
class CsvfeedDemoPipeline(object):

	def __init__(self):
		self.file = open('demo.csv', 'wb')
		self.exporter = CsvItemExporter(self.file, encoding = 'gbk')
		self.exporter.start_exporting()

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

	def process_item(self, item, spider):
		self.exporter.export_item(item)
		return item

→ 输出的结果为:(和上面的一样,之前的标题给录入了,后续处理一下)
在这里插入图片描述
至此全部的csvfeed模板爬取csv文件的内容梳理完毕

猜你喜欢

转载自blog.csdn.net/lys_828/article/details/106895243
今日推荐