irpas技术客

Python爬虫、数据清洗与可视化-4 - scrapy_Adrian-11_scrapy爬虫数据清洗

irpas 1885

新手学习日记1: 简介 Scrapy 是一个基于Twisted (用Python实现的基于事件驱动的网络引擎框架)的异步处理框架,是纯Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求,只需要定制开发几个模块就可以轻松实现一个爬虫。

一、scrapy框架架构图 二、爬虫执行流程

1.Engine引擎开始 调用了spiders中的spider的启动方法 2. 获取到了spider中start_urls 3. 将urls转换成请求(request)发送出去 4. request通过downloader进行下载,请求 5. 生成response 6. response通过engine返回到spider中的回调函数 parse上 7. parse中做数据提取 下一个请求的地址 数据都需要通过yield进行返回处理 8. yield的地址会提交到Engine,分配到调度器,开始进行上面过程的循环

yield的数据,会交给ItemPipeline存储

三、框架使用 1-1创建工程

scrapy startproject projectName

1-2进入工程目录:这里一定要进入到刚才创建好的目录中

cd projectName

1-3创建爬虫文件:创建的爬虫文件会出现在之前创建好的spiders文件夹下

scrapy genspider spiderName ·

1-4执行爬虫文件

scrapy crawl spiderName

1-5保存数据:

scrapy crawl *** -o xx.json #输出json格式文件 scrapy crawl *** -o xx.jsonl #输出json lines格式文件,模仁unicode scrapy crawl *** -o xx.csv #输出csv格式文件,excel可以打开 scrapy crawl *** -o xx.xml #输出xml格式文件

2-1 setting.py设置重点:

包含参数目中文描述BOT_NAME工程名SPIDER_MODULES爬虫文件的存放路径NEWSPIDER_MODULE新创建的爬虫生成位置ROBOTSTXT是否遵守robots协议CONCURRENT_REQUESTS同时最大的并发请求数DOWNLOAD_DELAY下载延迟COOKIES_ENABLED是否启用COOKIEDEFAULT_REQUEST_HEADERS默认请求头SPIDER_MIDDLEWARE爬虫中间件DOWNLOADER_MIDDLEWARE下载中间件EXTENSIONS拓展库ITEM_PIPELINES数据管道AUTOTHROTTLE自动限流、自动降频HTTPCACHE网络缓存

相当于requests中的headers参数中的User-Agent

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68' DOWNLOAD_DELAY = 3 # 下载延时 ROBOTSTXT_OBEY = False 可以忽略或者不遵守robots协议 CONCURRENT_REQUEST = 16 # 默认16个并行 DEFAULT_REQUEST_HEADERS = {} # 默认请求头,需要时填写

只有程序出现错误的情况下,才显示日志文件,程序正常执行时只会输出我们想要的结果

LOG_LEVEL='ERROR' == scrapy crawl spiderName --nolog //二者是等价的,当然还是推荐使用前者未加 LOG_LEVEL='ERROR #只有程序出现错误的情况下,才显示日志文件`

log等级: DEBUG最详细的日志信息,典型应用场景是 问题诊断 INFO信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 WARNING当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 ERROR由于一个更严重的问题导致某些功能不能正常运行时记录的信息 如IO操作失败或者连接问题 CRITICAL当发生严重错误,导致应用程序不能继续运行时记录的信息

保存CSV文件乱码 scrapy 爬取文件保存为CSV文件中文乱码的解决办法 //下面的设置可能会导致繁体出现,可以逐个试一下

FEED_EXPORT_ENCODING = "gb18030" FEED_EXPORT_ENCODING = "utf-8" FEED_EXPORT_ENCODING = "gbk"

4-1创建 Item Item 是保存爬取数据的容器。创建Item 需要继承scrapy.Item 类,并且定义类型为scrapy.Field 的字段。

text = scrapy.Field() #定义我们想要的字段:

编辑spider中的parse方法(用于解析response)

对response 变量包含的内容进行解析,可以使用CSS选择器或Xpath选择器,解析结果赋值给Item中的字段。

知识点:

1.1 回调函数:

在同步开发中没有回调函数的概念 回调函数使用场景都是异步开发 异步操作完成,主动通知给程序 这个过程就叫回调 1.2 同步和异步

同步 程序线性执行 异步 程序并行执行 异步通常都用在耗时操作中 1.3 yield

加强版本的return 返回并记录位置 下次可以继续执行 在Scrapy中大量使用 可以不中断程序进行数据返回

1.4 Selector

选择器,提取之后的对象 get 获取内部的内容


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #scrapy爬虫数据清洗 #11创建工程scrapy #startproject #genspider #spiderName