news 2026/4/15 19:39:12

爬取某省2019年的疫情数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
爬取某省2019年的疫情数据

1.明确目标

爬取某省2019年的疫情数据:
网站:www.ncovdata.spbeen.com

2.项目创建:

要求说明

  • 使用scrapy命令新建爬虫项目,名称为ncovdata,打开终端,在终端创建项目
scrapy startproject ncovdata

3.创建spider文件

要求说明

  • 使用scrapy命令新建爬虫文件,名称为ncov:
scrapy genspider-t basic ncov www.ncovdata.spbeen.com

4.启动爬虫

  • 使用scrapy命令在项目内执行爬虫文件
  • 创建Scrapy项目中的启动脚本,方便后续调试
    在终端执行:
scrapy crawl ncov

在顶级目录下创建一个脚本run.py:

fromscrapy.cmdlineimportexecute#execute(["","",""])execute("scrapy crawl ncov".split())

5.分析Scrapy的输出日志

日志结构说明

  • 顶部:版本信息,项目结构信息
  • 中部:日志输出,例如下载器组建的请求记录
  • 底部:爬虫过程的统计记录,包含请求和失败的次数
#顶部#Scrapy版本2025-12-2215:27:14[scrapy.utils.log]INFO:Scrapy2.12.0started(bot:ncovdata)#依赖的库2025-12-2215:27:14[scrapy.utils.log]INFO:Versions:lxml5.4.0.0,libxml22.11.9,cssselect1.3.0,parsel1.10.0,w3lib2.3.1,Twisted24.11.0,Python3.10.3(tags/v3.10.3:a342a49,Mar162022,13:07:40)[MSC v.192964bit(AMD64)],pyOpenSSL25.0.0(OpenSSL3.4.111Feb2025),cryptography44.0.2,Platform Windows-10-10.0.19045-SP02025-12-2215:27:14[scrapy.addons]INFO:Enabled addons:[]#异步请求库2025-12-2215:27:14[asyncio]DEBUG:Using selector:SelectSelector#队列信息,调度器内容2025-12-2215:27:14[scrapy.utils.log]DEBUG:Using reactor:twisted.internet.asyncioreactor.AsyncioSelectorReactor2025-12-2215:27:14[scrapy.utils.log]DEBUG:Using asyncio event loop:asyncio.windows_events._WindowsSelectorEventLoop2025-12-2215:27:14[scrapy.utils.log]DEBUG:Using reactor:twisted.internet.asyncioreactor.AsyncioSelectorReactor2025-12-2215:27:14[scrapy.utils.log]DEBUG:Using asyncio event loop:asyncio.windows_events._WindowsSelectorEventLoop#cd4613b32575bd40这个是telnet的密码2025-12-2215:27:14[scrapy.extensions.telnet]INFO:Telnet Password:cd4613b32575bd40#启动的拓展插件2025-12-2215:27:15[scrapy.middleware]INFO:Enabled extensions:['scrapy.extensions.corestats.CoreStats','scrapy.extensions.telnet.TelnetConsole','scrapy.extensions.logstats.LogStats']#项目设置信息2025-12-2215:27:15[scrapy.crawler]INFO:Overridden settings:{'BOT_NAME':'ncovdata','FEED_EXPORT_ENCODING':'utf-8','NEWSPIDER_MODULE':'ncovdata.spiders','SPIDER_MODULES':['ncovdata.spiders'],'TWISTED_REACTOR':'twisted.internet.asyncioreactor.AsyncioSelectorReactor'}# 下载器中间件2025-12-2215:27:15[scrapy.middleware]INFO:Enabled downloader middlewares:['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware','scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware','scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware','scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware','scrapy.downloadermiddlewares.useragent.UserAgentMiddleware','scrapy.downloadermiddlewares.retry.RetryMiddleware','scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware','scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware','scrapy.downloadermiddlewares.redirect.RedirectMiddleware','scrapy.downloadermiddlewares.cookies.CookiesMiddleware','scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware','scrapy.downloadermiddlewares.stats.DownloaderStats']#代表爬虫中间件2025-12-2215:27:15[scrapy.middleware]INFO:Enabled spider middlewares:['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware','scrapy.spidermiddlewares.referer.RefererMiddleware','scrapy.spidermiddlewares.urllength.UrlLengthMiddleware','scrapy.spidermiddlewares.depth.DepthMiddleware']2025-12-2215:27:15[scrapy.middleware]INFO:Enabled item pipelines:#代表管道[]#spider opened到Closing spider(finshed)为中间过程2025-12-2215:27:15[scrapy.core.engine]INFO:Spider opened#打开2025-12-2215:27:15[scrapy.extensions.logstats]INFO:Crawled0pages(at0pages/min),scraped0items(at0items/min)#这行的作用是定期输出一条日志,INFO后的信息为一分钟爬取了多少页,一分钟几页2025-12-2215:27:15[scrapy.extensions.telnet]INFO:Telnet console listening on127.0.0.1:6023#它代表telnet的一个服务终端,用于拓展插件用的2025-12-2215:27:15[scrapy.core.engine]DEBUG:Crawled(200)<GET http://ncovdata.spbeen.com/>(referer:None)#请求网址#finished代表停止,表示爬虫结束2025-12-2215:27:15[scrapy.core.engine]INFO:Closing spider(finished)#关闭#底部# 这个大括号为状态收集器收集的整体信息2025-12-2215:27:15[scrapy.statscollectors]INFO:Dumping Scrapy stats:{'downloader/request_bytes':220,'downloader/request_count':1,'downloader/request_method_count/GET':1,'downloader/response_bytes':57244,'downloader/response_count':1,'downloader/response_status_count/200':1,'elapsed_time_seconds':0.432231,'finish_reason':'finished','finish_time':datetime.datetime(2025,12,22,7,27,15,641880,tzinfo=datetime.timezone.utc),'items_per_minute':None,'log_count/DEBUG':6,'log_count/INFO':10,'response_received_count':1,'responses_per_minute':None,'scheduler/dequeued':1,'scheduler/dequeued/memory':1,'scheduler/enqueued':1,'scheduler/enqueued/memory':1,'start_time':datetime.datetime(2025,12,22,7,27,15,209649,tzinfo=datetime.timezone.utc)}# 日志都是日期+时间+信息的结构,中括号中的代表组件,INFO为日志的类型,分号后的为具体信息2025-12-2215:27:15[scrapy.core.engine]INFO:Spider closed(finished)

默认情况下,下载器中间件,和爬虫中间件都不需要改,重点是管道,从管道开始,到爬虫中部内容会非常多,如果运行失败,底部收集器的内容总结不会出现

6.编写并运行爬虫测试

任务说明

  • 请求接口并拿到接口数据,多多益善
  • 解析接口数据,转换成python的字典对象
  • 从目标json内容中提取出所需数据

数据要求说明

  • 获取某个省10天连续数据
  • 单条数据:{“江西省”:{“xx”:“xx”,“xx”:“xx”}}
    重新构建start_urls函数
importscrapyimportdatetimeclassNcovSpider(scrapy.Spider):name="ncov"allowed_domains=["ncovdata.spbeen.com"]#start_urls = ["http://ncovdata.spbeen.com/"]base_url="http://ncovdata.spbeen.com/apis/get_china_provinces/?query={}"defstart_requests(self):start_date_str='2020-01-26'start_date=datetime.datetime.strptime(start_date_str,'%Y-%m-%d')foriinrange(0,15):current_date=start_date+datetime.timedelta(days=i)current_url=self.base_url.format(current_date.strftime('%Y-%m-%d'))print(i,current_url)yieldscrapy.Request(url=current_url,callback=self.parse)defparse(self,response):pass

7.获取数据并用item保存

importscrapyimportdatetimeimportjsonclassNcovSpider(scrapy.Spider):name="ncov"allowed_domains=["ncovdata.spbeen.com"]# start_urls = [# "http://ncovdata.spbeen.com/apis/get_china_provinces/?query_date=2020-01-31",# ]base_url="http://ncovdata.spbeen.com/apis/get_china_provinces/?query_date={}"defstart_requests(self):start_date_str='2020-01-26'start_date=datetime.datetime.strptime(start_date_str,"%Y-%m-%d")foriinrange(0,15):current_date=start_date+datetime.timedelta(days=i)current_url=self.base_url.format(current_date.strftime("%Y-%m-%d"))# return scrapy.Request(url=current_url)yieldscrapy.Request(url=current_url)defparse(self,response):province="江西"data_list=response.json().get('data',[])forprovince_dictindata_list:# k, v = province_dict.items()ifprovinceinstr(province_dict):item=province_dict item['source']=response.textbreakelse:item={}item['source']=''# print(item)returnitem

8.管道文件存储数据

任务说明

  • 配置settings.py代码,启用管道文件
  • 使用管道文件接收item,并输出
  • 将item的数据进行存储到本地的txt文件中
    1.在settings文件中打开管道

进入pipelines.py文件输出item查看内容


输出结果:

新建一个data文件夹,将数据写入文件夹

fromitemadapterimportItemAdapterimportdatetimeimportjsonclassNcovdataPipeline:current_date_str=datetime.datetime.now().strftime("%Y%m%d%H%M%S")defprocess_item(self,item,spider):withopen('data/{}.txt'.format(self.current_date_str),mode='a',encoding='utf8')asfile:file.write(json.dumps(item,ensure_ascii=False))file.write('\n')returnitem
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 7:06:44

游戏兼容性优化终极指南:让你的老游戏在现代系统上重获新生

还在为经典游戏在新系统上闪退、卡顿而烦恼吗&#xff1f;本指南将带你一站式解决所有兼容性问题&#xff0c;让你的老游戏在现代Windows系统上流畅运行&#xff01; 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地…

作者头像 李华
网站建设 2026/4/16 0:56:35

【IC】芯片IO物理层差异

如果 SerDes 这么厉害&#xff0c;为什么不能用它把所有接口&#xff08;内存、显卡、Chiplet&#xff09;都统一了&#xff1f; 答案是&#xff1a;物理层&#xff08;PHY&#xff09;并没有你想象中那么“通用”。 虽然它们都可能用到 SerDes 技术&#xff0c;但就像F1 赛车、…

作者头像 李华
网站建设 2026/4/15 10:40:06

【IC】UCIE与GDDR

业界其实正在往这个方向走&#xff0c;只不过换了一个名字&#xff0c;叫 HBM (High Bandwidth Memory)。 直接回答你的问题&#xff1a;因为 UCIe 是“短腿”&#xff0c;跑不出封装&#xff1b;而 GDDR 是为“长腿”设计的&#xff0c;必须跑在 PCB 板上。 如果你非要用 UCIe…

作者头像 李华
网站建设 2026/4/15 16:05:38

终极指南:浏览器中的SQLite数据库管理器,零安装快速上手

终极指南&#xff1a;浏览器中的SQLite数据库管理器&#xff0c;零安装快速上手 【免费下载链接】sqlite-viewer View SQLite file online 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-viewer 想要在浏览器中直接查看和操作SQLite数据库文件吗&#xff1f;这款…

作者头像 李华
网站建设 2026/4/15 16:25:11

ARM Cortex-M开发:Keil MDK下载与工程模板搭建指南

ARM Cortex-M开发&#xff1a;从零搭建Keil MDK工程模板的实战指南 你有没有遇到过这样的场景&#xff1f; 刚接手一个新项目&#xff0c;打开别人的Keil工程——文件夹杂乱无章&#xff0c;头文件路径错乱&#xff0c;编译一堆警告&#xff0c;甚至换个电脑就打不开。更糟的…

作者头像 李华
网站建设 2026/4/2 16:34:49

一位全加器电源与接地网络布局:实践操作指南

一位全加器的“生命线”&#xff1a;电源与地网布局实战精要在数字芯片的世界里&#xff0c;一位全加器&#xff08;Full Adder, FA&#xff09;看似不起眼——它不过是由二十几个晶体管组成的组合逻辑单元。但正是这个“小角色”&#xff0c;却是构建CPU算术核心、GPU运算流水…

作者头像 李华