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

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

python分布式文章是连载的啊......,分别不同的方式和策略实现

一步一步提升你的爬虫速率。

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

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

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

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

那是什么逻辑呢?

下面解释一下:

代码  xxx.py

#coding:utf-8
import requests
def need_url(url):
    page = requests.get(url).text
    print(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).text
    print(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)群,帮你解决问题:

猜你喜欢

转载自blog.csdn.net/m0_38124502/article/details/84066603