广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何通过Scrapy框架实现爬取百度新冠疫情数据
  • 319
分享到

Python如何通过Scrapy框架实现爬取百度新冠疫情数据

2023-06-25 13:06:13 319人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python如何通过scrapy框架实现爬取百度新冠疫情数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。环境部署主要简单推荐一下插件推荐这里先推荐一个Go

这篇文章主要介绍了python如何通过scrapy框架实现爬取百度新冠疫情数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    环境部署

    主要简单推荐一下

    插件推荐

    这里先推荐一个Google Chrome的扩展插件xpath helper,可以验证xpath语法是不是正确。

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    爬虫目标

    需要爬取的页面:实时更新:新型冠状病毒肺炎疫情地图

    主要爬取的目标选取了全国的数据以及各个身份的数据。

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    项目创建

    使用scrapy命令创建项目

    scrapy startproject yqsj

    WEBdriver部署

    这里就不重新讲一遍了,可以参考我这篇文章的部署方法:Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程

    项目代码

    开始撸代码,看一下百度疫情省份数据的问题。

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    页面需要点击展开全部span。所以在提取页面源码的时候需要模拟浏览器打开后,点击该按钮。所以按照这个方向,我们一步步来。

    Item定义

    定义两个类YqsjProvinceItem和YqsjChinaitem,分别定义国内省份数据和国内数据。

    # Define here the models for your scraped items## See documentation in:# https://docs.scrapy.org/en/latest/topics/items.html import scrapy  class YqsjProvinceItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()    location = scrapy.Field()    new = scrapy.Field()    exist = scrapy.Field()    total = scrapy.Field()    cure = scrapy.Field()    dead = scrapy.Field()  class YqsjChinaItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()    # 现有确诊    exist_diagnosis = scrapy.Field()    # 无症状    asymptomatic = scrapy.Field()    # 现有疑似    exist_suspecte = scrapy.Field()    # 现有重症    exist_severe = scrapy.Field()    # 累计确诊    cumulative_diagnosis = scrapy.Field()    # 境外输入    overseas_input = scrapy.Field()    # 累计治愈    cumulative_cure = scrapy.Field()    # 累计死亡    cumulative_dead = scrapy.Field()

    中间件定义

    需要打开页面后点击一下展开全部。

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    完整代码

    # Define here the models for your spider middleware## See documentation in:# Https://docs.scrapy.org/en/latest/topics/spider-middleware.html from scrapy import signals # useful for handling different item types with a single interfacefrom itemadapter import is_item, ItemAdapterfrom scrapy.http import HtmlResponsefrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver import ActionChainsimport time  class YqsjspiderMiddleware:    # Not all methods need to be defined. If a method is not defined,    # scrapy acts as if the spider middleware does not modify the    # passed objects.     @claSSMethod    def from_crawler(cls, crawler):        # This method is used by Scrapy to create your spiders.        s = cls()        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)        return s     def process_spider_input(self, response, spider):        # Called for each response that goes through the spider        # middleware and into the spider.         # Should return None or raise an exception.        return None     def process_spider_output(self, response, result, spider):        # Called with the results returned from the Spider, after        # it has processed the response.         # Must return an iterable of Request, or item objects.        for i in result:            yield i     def process_spider_exception(self, response, exception, spider):        # Called when a spider or process_spider_input() method        # (from other spider middleware) raises an exception.         # Should return either None or an iterable of Request or item objects.        pass     def process_start_requests(self, start_requests, spider):        # Called with the start requests of the spider, and works        # similarly to the process_spider_output() method, except        # that it doesn't have a response associated.         # Must return only requests (not items).        for r in start_requests:            yield r     def spider_opened(self, spider):        spider.logger.info('Spider opened: %s' % spider.name)  class YqsjDownloaderMiddleware:    # Not all methods need to be defined. If a method is not defined,    # scrapy acts as if the downloader middleware does not modify the    # passed objects.     @classmethod    def from_crawler(cls, crawler):        # This method is used by Scrapy to create your spiders.        s = cls()        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)        return s     def process_request(self, request, spider):        # Called for each request that goes through the downloader        # middleware.         # Must either:        # - return None: continue processing this request        # - or return a Response object        # - or return a Request object        # - or raise IgnoreRequest: process_exception() methods of        #   installed downloader middleware will be called        # return None        try:            spider.browser.get(request.url)            spider.browser.maximize_window()            time.sleep(2)            spider.browser.find_element_by_xpath("/*;q=0.8',    'Accept-Language': 'en',    'User-Agent': 'Mozilla/5.0 (windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'} # Enable or disable spider middlewares# See https://docs.scrapy.org/en/latest/topics/spider-middleware.htmlSPIDER_MIDDLEWARES = {   'yqsj.middlewares.YqsjSpiderMiddleware': 543,} # Enable or disable downloader middlewares# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.htmlDOWNLOADER_MIDDLEWARES = {   'yqsj.middlewares.YqsjDownloaderMiddleware': 543,} # Enable or disable extensions# See https://docs.scrapy.org/en/latest/topics/extensions.html#EXTENSIONS = {#    'scrapy.extensions.telnet.TelnetConsole': None,#} # Configure item pipelines# See https://docs.scrapy.org/en/latest/topics/item-pipeline.htmlITEM_PIPELINES = {   'yqsj.pipelines.YqsjPipeline': 300,} # Enable and configure the AutoThrottle extension (disabled by default)# See https://docs.scrapy.org/en/latest/topics/autothrottle.html#AUTOTHROTTLE_ENABLED = True# The initial download delay#AUTOTHROTTLE_START_DELAY = 5# The maximum download delay to be set in case of high latencies#AUTOTHROTTLE_MAX_DELAY = 60# The average number of requests Scrapy should be sending in parallel to# each remote server#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0# Enable showing throttling stats for every response received:#AUTOTHROTTLE_DEBUG = False # Enable and configure HTTP caching (disabled by default)# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings#HTTPCACHE_ENABLED = True#HTTPCACHE_EXPIRATION_SECS = 0#HTTPCACHE_DIR = 'httpcache'#HTTPCACHE_IGNORE_HTTP_CODES = []#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

    验证结果

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    看看结果文件

    Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    感谢你能够认真阅读完这篇文章,希望小编分享的“Python如何通过Scrapy框架实现爬取百度新冠疫情数据”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网Python频道,更多相关知识等着你来学习!

    --结束END--

    本文标题: Python如何通过Scrapy框架实现爬取百度新冠疫情数据

    本文链接: https://www.lsjlt.com/news/305306.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Python如何通过Scrapy框架实现爬取百度新冠疫情数据
      这篇文章主要介绍了Python如何通过Scrapy框架实现爬取百度新冠疫情数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。环境部署主要简单推荐一下插件推荐这里先推荐一个Go...
      99+
      2023-06-25
    • Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
      目录前言环境部署插件推荐爬虫目标项目创建webdriver部署项目代码Item定义中间件定义定义爬虫pipeline输出结果文本配置文件改动验证结果总结前言 闲来无聊,写了一个爬虫程...
      99+
      2022-11-12
    • Python如何通过Scrapy框架实现爬取CSDN全站热榜标题热词
      小编给大家分享一下Python如何通过Scrapy框架实现爬取CSDN全站热榜标题热词,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!环境部署scrapy安装pip install scrapy ...
      99+
      2023-06-25
    • 如何使用Python通过获取剪切板数据实现百度划词搜索功能
      小编给大家分享一下如何使用Python通过获取剪切板数据实现百度划词搜索功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、实现划词功能说是划词翻译,实际上我们...
      99+
      2023-06-15
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作