热门标签 | 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)群,帮你解决问题:


推荐阅读
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • Python应用实例大揭秘:七大令人惊叹的高阶技巧展示
    2020年,Python无疑成为了最炙手可热的编程语言,其影响力已远远超出程序员的范畴。从初学者到资深从业者,甚至小学生,都在纷纷加入Python的学习热潮中。凭借其低门槛、易上手和强大的功能,Python正逐渐成为各行业不可或缺的工具。本文将揭示七个令人惊叹的Python高级应用技巧,帮助读者进一步提升编程水平。 ... [详细]
  • 非线性门控感知器算法的实现与应用分析 ... [详细]
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社区 版权所有