看过博主文章的小伙伴都知道,所有博客以简为主,以懂为主。
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)群,帮你解决问题: