热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python超易懂分布式爬虫实现(一)

看过博主文章的小伙伴都知道,所有博客以简为主,以懂为主。python分布式文章是连载的啊,分别不同的方式和策略实现。一步一

看过博主文章的小伙伴都知道,所有博客以简为主,以懂为主

python分布式文章是连载的啊......,分别不同的方式和策略实现
一步一步提升你的爬虫速率。

------------------------------------------------------------------------------------------------------------------------------------------------------

本章基于python3自带的RPC模块xmlrpc

RPC大家应该听说过。小伙伴可以去百度具体了解一下RPC。

简要说明RPC :   一种远程调用程序的实现协议。

那是什么逻辑呢?

下面解释一下:

代码  xxx.py

#coding:utf-8
import requests
def need_url(url):page = requests.get(url).textprint(page)return "ok"
if __name__ == "__main__":pass

我把 xxx.py 放在100台服务器上,然后在本地调用100台服务器上的 xxx.py 模块,

并执行 need_url 方法传入参数 不同网站的url 。

那每一台机器就都可以给我抓取不同的网站了。

可是,我们怎样去调用不同服务器上的xxx.py并给need_url方法传参呢?

如果在自己的电脑上,我们只需要 from xxx import need_url  就行了。

但是xxx.py是放在远端服务器上的,那导入模块就行不通了。

这个时候RPC远端调用协议就起作用了。

为了调用远端服务器上的xxx.py模块,我们首先要暴露远端上的xxx.py模块。

暴露以后,我们就能找到它了。

代码修改到暴露状态:

#coding:utf-8
from xmlrpc.server import SimpleXMLRPCServer
import requests
def need_url(url):page = requests.get(url).textprint(page)return "ok"
if __name__ == "__main__":server = SimpleXMLRPCServer(("0.0.0.0", 8001))print("Listening on port 8001...")server.register_function(need_url, 'need_url')server.serve_forever()

小伙伴们细细观察,首先是使用xmlrpc.server中的SimpleXMLRPCServer开了一个公共端口8001,

然后又给8001端口绑定了一个need_url方法。

终于明白了,那我只需要在本地电脑上连上远端服务器的公开的8001端口,并传url就可以了。

本地代码ooo.py:

#coding:utf-8
from xmlrpc.client import ServerProxy
def send_url( remote_addr , url ):server = ServerProxy(remote_addr)result = server.need_url(url)print(result)if __name__ == "__main__":send_url("http://123.123.123.123:8001","http://jsonip.com")

虽然暴露了8001端口 ,我们也不能通过from xxx import need_url 方式导入,这种导入方式只对本地电脑才能使用。

可是我们需找到远端暴露的need_url方法,那我们首先要找到远端服务器地址,使用其8001端口,并传值。

使用xmlrpc.client的ServerProxy连上服务器123.123.123.123的8001端口,实例化对象server,通过对象调用need_url方法并传参("http://jsonip.com")

远端服务器上的xxx.py模块就执行need_url方法了。执行成功以后返回ok,本地打印出来。

到此,调用远端一台电脑就成功了。

调用100台远端服务器怎么实现呢?

100台服务器上都应该暴露我们的端口和方法才行。

只需要把xxx.py分别放到100台机器上。

ooo.py中send_url方法分别传入不同的远端地址就行了。

----------------------------------------------------------------------------------------------------------------------------------------------------

python分布式文章是连载的啊......,分别不同的方式和策略实现
一步一步提升你的爬虫速率。

 

欢迎进(Q)群,帮你解决问题:


推荐阅读
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文探讨了如何在不重新加载URL的情况下,触发WebView的PictureListener.onNewPicture()方法,以实现页面的重新绘制或渲染。 ... [详细]
author-avatar
5jkd_330
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有