当前位置: 首页 > wzjs >正文

住房和建设厅官方网站怎么才能在百度搜到自己的网站

住房和建设厅官方网站,怎么才能在百度搜到自己的网站,重庆建设摩托车质量怎么样,宁波网站建设制作公司排名1. 系统架构概述 一个典型的分布式网络爬虫系统通常包含以下几个核心组件: 1.主节点(Master Node): 任务调度:负责将抓取任务分配给各个工作节点。URL 管理:维护待抓取的 URL 队列和已抓取的 URL 集合&a…

1. 系统架构概述

一个典型的分布式网络爬虫系统通常包含以下几个核心组件:

1.主节点(Master Node)

  • 任务调度:负责将抓取任务分配给各个工作节点。
  • URL 管理:维护待抓取的 URL 队列和已抓取的 URL 集合,避免重复抓取。
  • 数据存储:存储抓取到的数据,通常使用数据库或分布式存储系统。
  • 监控与日志:监控各个工作节点的状态,记录系统日志以便故障排查。

2.工作节点(Worker Nodes)

  • 数据抓取:执行实际的网页抓取任务。
  • 数据解析:解析抓取到的网页内容,提取所需的信息。
  • 数据存储:将解析后的数据发送到主节点或直接存储到数据库。

3.消息队列(Message Queue)

  • 任务队列:用于在主节点和工作节点之间传递抓取任务。
  • 结果队列:用于在工作节点和主节点之间传递抓取结果。

4.数据库(Database)

  • 存储抓取数据:如 MongoDB、Elasticsearch、MySQL 等。
  • 存储 URL 队列:可以使用 Redis 等内存数据库来存储待抓取的 URL。

5.配置与部署

  • 配置管理:集中管理系统的配置参数,如抓取频率、并发数等。
  • 容器化与编排:使用 Docker、Kubernetes 等工具进行容器化和编排,简化部署和管理。

    2. 关键技术选型

    2.1 Python 库与框架

    • Scrapy:一个功能强大的 Python 爬虫框架,支持异步抓取、扩展性强。
    • Scrapy-Redis:基于 Redis 的 Scrapy 分布式扩展,用于分布式任务调度。
    • Celery:一个异步任务队列,可以与 Scrapy 结合使用,实现更灵活的任务调度。
    • Redis:用作消息队列和缓存,存储待抓取的 URL 和抓取结果。
    • SQLAlchemy / Django ORM:用于数据库操作(如果使用关系型数据库)。
    • BeautifulSoup / lxml:用于网页解析和内容提取。

    2.2 数据库

    • 关系型数据库:如 MySQL、PostgreSQL,适用于结构化数据存储。
    • NoSQL 数据库
      • MongoDB:适用于存储非结构化或半结构化数据,支持灵活的文档模型。
      • Elasticsearch:适用于全文检索和分析。

    2.3 消息队列

    • Redis:作为轻量级消息队列,支持发布/订阅模式。
    • RabbitMQ:功能强大的消息队列,支持多种消息协议。

    3. 详细实现步骤

    3.1 环境准备

    1.安装必要的库

    bash
    
    pip install scrapy scrapy-redis celery redis
    

    2.安装数据库

    • 安装 Redis 并启动 Redis 服务器。
    • 安装 MongoDB 或其他选择的数据库并启动。

      3.2 配置 Scrapy 项目

      1.创建 Scrapy 项目

      bash
      
      scrapy startproject myspider
      

      2.配置 Scrapy-Redis
      在 settings.py 中添加以下配置:

      python
      
      # settings.py# 使用 Scrapy-Redis 的调度器
      SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 使用 Redis 作为去重存储
      DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 设置 Redis 主机和端口
      REDIS_HOST = 'localhost'
      REDIS_PORT = 6379# 启用管道
      ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 300,
      }# 启用分布式请求
      SCHEDULER_PERSIST = True
      

        3.3 定义爬虫

        1.创建爬虫

        bash
        
        scrapy genspider example example.com
        

        2.编辑爬虫

        python
        
        # myspider/spiders/example.pyimport scrapy
        from scrapy_redis.spiders import RedisSpiderclass ExampleSpider(RedisSpider):name = 'example'redis_key = 'myspider:start_urls'def parse(self, response):# 解析网页内容,提取数据title = response.xpath('//title/text()').get()yield {'url': response.url,'title': title,}# 获取页面中的所有链接,并添加到 Redis 队列中links = response.xpath('//a/@href').getall()for link in links:yield scrapy.Request(url=link, callback=self.parse)
        

          3.4 配置 Celery(可选)

          如果需要更灵活的任务调度,可以使用 Celery。以下是一个简单的配置示例:

          1.创建 Celery 实例

          python
          
          # myspider/celery_app.pyfrom celery import Celeryapp = Celery('myspider',broker='redis://localhost:6379/0',backend='redis://localhost:6379/1')app.conf.update(task_serializer='json',accept_content=['json'],result_serializer='json',timezone='Europe/Paris',enable_utc=True,
          )
          

          2.定义抓取任务

          python
          
          # myspider/tasks.pyfrom celery_app import app
          from scrapy.crawler import CrawlerProcess
          from scrapy.utils.project import get_project_settings@app.task
          def run_spider(url):process = CrawlerProcess(get_project_settings())process.crawl('example', start_urls=[url])process.start()
          

            3.5 启动服务

            1.启动 Redis 服务器

            bash
            
            redis-server
            

            2.启动 Celery worker(如果使用 Celery)

            bash
            
            celery -A myspider.celery_app worker --loglevel=info
            

            3.启动 Scrapy 爬虫

            bash
            
            scrapy crawl example
            

            或者,如果使用 Celery,可以通过调用 Celery 任务来启动爬虫:

            python
            
            from tasks import run_spiderrun_spider.delay('http://example.com')
            

              3.6 数据存储

              1.使用 Scrapy-Redis 管道
              Scrapy-Redis 提供了 RedisPipeline,可以将抓取到的数据存储到 Redis 中。

              2.自定义管道
              如果需要将数据存储到其他数据库(如 MongoDB),可以编写自定义管道。例如:

              python
              
              # myspider/pipelines.pyimport pymongoclass MongoPipeline:def __init__(self, mongo_uri, mongo_db, mongo_collection):self.mongo_uri = mongo_uriself.mongo_db = mongo_dbself.mongo_collection = mongo_collection@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DB'),mongo_collection=crawler.settings.get('MONGO_COLLECTION'))def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]def close_spider(self, spider):self.client.close()def process_item(self, item, spider):self.db[self.mongo_collection].insert_one(dict(item))return item
              

              在 settings.py 中添加配置:

              python
              
              MONGO_URI = 'mongodb://localhost:27017'
              MONGO_DB = 'mydatabase'
              MONGO_COLLECTION = 'mycollection'
              ITEM_PIPELINES = {'myspider.pipelines.MongoPipeline': 300,
              }
              

                4. 任务调度与负载均衡

                4.1 使用 Scrapy-Redis 进行任务调度

                Scrapy-Redis 利用 Redis 的发布/订阅机制,实现分布式任务调度。主节点将 URL 推送到 Redis 的 start_urls 队列,工作节点从队列中获取 URL 并进行抓取。

                4.2 使用 Celery 进行任务调度(可选)

                如果需要更复杂的任务调度策略,如定时任务、任务优先级等,可以使用 Celery。Celery 可以与 Scrapy 结合使用,提供更灵活的任务管理。

                4.3 负载均衡

                • 动态分配任务:通过 Redis 队列实现动态任务分配,确保工作节点之间的负载均衡。
                • 自动扩展:使用 Kubernetes 或其他容器编排工具,根据负载自动扩展工作节点的数量。

                5. 错误处理与容错

                5.1 异常处理

                • 抓取失败:记录失败的 URL,稍后重试。
                • 解析错误:处理解析异常,确保系统的稳定性。

                5.2 重试机制

                • 自动重试:配置 Scrapy 的重试机制,自动重试失败的请求。
                • 自定义重试策略:根据具体需求,实现自定义的重试策略,如指数退避。

                5.3 断点续爬

                • 持久化队列:使用 Redis 持久化队列,确保在系统重启后能够继续抓取未完成的任务。
                • 状态恢复:记录抓取状态,在系统恢复后从上次的状态继续。

                6. 性能优化

                6.1 并发控制

                • 限制并发数:根据系统资源和目标网站的承载能力,限制并发请求的数量。
                • 连接池:使用连接池管理 HTTP 连接,提高性能。

                6.2 数据抓取优化

                • 异步抓取:使用 Scrapy 的异步特性,提高抓取效率。
                • 分布式抓取:通过分布式架构,分散抓取负载,提高整体性能。

                6.3 缓存机制

                • 缓存 DNS 解析:减少 DNS 解析时间。
                • 缓存静态资源:减少重复请求,提高抓取速度。

                7. 安全性与合规性

                7.1 遵守网站的 robots.txt

                • 遵守爬虫协议:在抓取前检查目标网站的 robots.txt,确保遵守其爬虫政策。
                • 合法合规:确保抓取行为符合相关法律法规,避免侵犯隐私或知识产权。

                7.2 反爬虫机制

                • IP 轮换:使用代理池,轮换 IP 地址,防止被封禁。
                • 请求头伪装:设置合适的请求头,模拟浏览器行为。
                • 验证码处理:处理网站可能出现的验证码机制。

                8. 监控与日志

                8.1 实时监控

                • 系统监控:使用 Prometheus 和 Grafana 监控系统的性能指标,如 CPU、内存、磁盘使用等。
                • 爬虫监控:监控抓取任务的进度、成功率、失败率等。

                8.2 日志管理

                • 集中日志管理:使用 ELK(Elasticsearch, Logstash, Kibana)堆栈,集中管理和分析日志。
                • 错误日志:记录详细的错误日志,便于故障排查。

                9. 总结

                基于 Python 的分布式网络爬虫系统可以通过结合 Scrapy、Redis、Celery 等技术,实现高效、可扩展且稳定的抓取任务。

                通过合理的架构设计、任务调度、错误处理和性能优化,可以构建一个强大的爬虫系统,满足各种抓取需求。以下是一个简单的项目结构示例:

                myspider/
                ├── myspider/
                │   ├── __init__.py
                │   ├── items.py
                │   ├── pipelines.py
                │   ├── settings.py
                │   └── spiders/
                │       ├── __init__.py
                │       └── example.py
                ├── celery_app.py
                ├── tasks.py
                └── scrapy.cfg
                

                联系方式:https://t.me/XMOhost26

                交流技术群:https://t.me/owolai008


                文章转载自:

                http://G7LTJBuU.qnkLx.cn
                http://RuWCrOpU.qnkLx.cn
                http://Y8SV0LNt.qnkLx.cn
                http://TwMkkAK2.qnkLx.cn
                http://sMEathjF.qnkLx.cn
                http://awSYNtIY.qnkLx.cn
                http://efTotM6w.qnkLx.cn
                http://YppwzwG8.qnkLx.cn
                http://cri3TxKN.qnkLx.cn
                http://6Yl5cYQs.qnkLx.cn
                http://lpeejjVk.qnkLx.cn
                http://f5WF9j5E.qnkLx.cn
                http://OjfBqrHX.qnkLx.cn
                http://DqipQMmC.qnkLx.cn
                http://ytDAeRNx.qnkLx.cn
                http://rG4hj76C.qnkLx.cn
                http://oDNs4H4v.qnkLx.cn
                http://yjB7dyx1.qnkLx.cn
                http://qXUEr4jk.qnkLx.cn
                http://hcbEWVMz.qnkLx.cn
                http://kdjvTzI4.qnkLx.cn
                http://IueggFBV.qnkLx.cn
                http://WlOkGH9s.qnkLx.cn
                http://iyvTXP7f.qnkLx.cn
                http://5a7HuMAB.qnkLx.cn
                http://XiwK4M6G.qnkLx.cn
                http://mu9J38gW.qnkLx.cn
                http://eQbc9vZs.qnkLx.cn
                http://EoXQHkaZ.qnkLx.cn
                http://OxWQsPi1.qnkLx.cn
                http://www.dtcms.com/wzjs/702847.html

                相关文章:

              1. 广东粤建设计院网站seo宣传网站
              2. 网站开发技术写什么内容北京最大的火车站
              3. 政务服务网站建设性建议seo网站推广全程实例
              4. 西宁网站建设优化四川省城乡和住房建设厅网站首页
              5. 在东莞找工作上哪个网站汕头老城图片
              6. 展示营销型网站做app网站制作
              7. 建设解锁卡网站首页润滑油网站建设
              8. 建设网站公开教学视频下载响应式网站开发周期
              9. 网站建设公司哪家好 要上磐石网络上传网站安装教程视频教程
              10. 百度上做网站需要钱吗网站漂浮二维码
              11. 做网站用的插件游戏网站建设方案
              12. 深圳市信任网站关于网站建设的问卷分析
              13. 湘潭网站建设湘潭振企专业小白怎么制作微信小程序
              14. 找家里做的工作上哪个网站嘉兴做微网站
              15. 移动端网站开发介绍企业如何做好网络营销
              16. 做外贸 网站邮箱申请手机网站框架
              17. 张家港网站设计制作做新闻类网站如何盈利
              18. 辽宁定制网站建设推广全国疫苗接种率最新数据
              19. 网站建设行业导航站点网站建设免费视频教程
              20. 网站怎么做自己站长动漫制作专业电脑配置
              21. 网站建设服务开发wordpress 缺省目录
              22. 做网站一定需要虚拟主机吗咨询网站搭建
              23. 自己怎样做免费网站静态网站站内搜索
              24. 国泰君安建设工程官方网站孵化基地网站怎么建设
              25. 网站管理后台 模板dede电影网站模板
              26. 漳州优化网站建设保定百度推广电话
              27. 知名网站定制报价医院网站页面设计
              28. wordpress安全防护甘肃谷歌seo
              29. 为什么百度不收录我的网站软件商店oppo版本最新版
              30. 垫江网站建设网站站seo教程