让你的蜘蛛多线程。
mspider的Python项目详细描述
mspider
一个多线程蜘蛛包装,可以使你的蜘蛛多线程容易,帮助你抓取网站更快。:zap:
请注意,这只适用于Python3。
安装
mspider可以使用pip轻松安装:
pip install mspider
快速启动
自动创建MSpider
cd
要在Terminal或CMD中创建MSpider
的文件夹,然后键入genspider -b <template based> <your spider name>
,例如:$ genspider -b MSpider test
其中
-b
是要选择您所基于的蜘蛛的模板,您可以选择“mspider”(如果未给定则为默认值)或“crawler”,并且test
是蜘蛛的名称。如果看到以下信息,则成功创建包含
MSpider
的文件test.py
。create a spider named test.
打开蜘蛛文件
test.py
。在第8行(或第15行,如果您的spider模板是“crawler”)中找到self.source = []
,并用您希望由spider处理的源(通常是一个url列表)替换它,例如:self.source=['http://www.github.com','http://www.baidu.com']
self.source
的每个元素称为src_item
,而src_item
的索引称为index
。找到函数
basic_func
,在这里可以定义spider函数,例如:defbasic_func(self,index,src_item):url=src_itemres=self.sess.get(url)html=res.content.decode('utf-8')# deal with the html# save the extracted information
让蜘蛛开始爬行。
$ python3 test.py
您只需在终端或cmd中输入每个线程处理的源项的数量(批量大小),然后返回它,然后mspider将以多线程的方式对您的源进行爬网。
[INFO]: MSpider is ready. [INFO]: 2 urls in total. [INPUT]: BATCH SIZE: 1[INFO]: Open threads: 100%|████████████████|2/2 [00:00<00:00, 356.36it/s][INFO]: Task done. [INFO]: The task costs 1.1157 sec. [INFO]: 0 urls failed.
手动创建MSpider
标准导入mspider。
frommspider.spiderimportMSpider
定义单线程蜘蛛的功能。
注意这个函数必须有两个参数。
index
:源项索引src_item
:在这个函数中要处理的源项,通常是一个url或任何需要处理的东西,比如像(name, url)
这样的元组。
defspi_func(index,src_item):name,url=src_itemres=mspider.sess.get(url)html=res.content.decode('utf-8')# deal with the html# save the extracted information
关键部分来了。创建
MSpider
的实例,并将spider函数和要爬网的源传递给它。sources=[('github','http://www.github.com'),('baidu','http://www.baidu.com')]mspider=MSpider(spi_func,sources)
开始爬行!
mspider.crawl()
然后您将在终端或命令行中看到以下信息。您只需输入批大小,然后mspider将以多线程方式抓取您的源代码。
[INFO]: MSpider is ready. [INFO]: 2 urls in total. [INPUT]: BATCH SIZE: 1[INFO]: Open threads: 100%|████████████████|2/2 [00:00<00:00, 356.36it/s][INFO]: Task done. [INFO]: The task costs 1.1157 sec. [INFO]: 0 urls failed.
用法
mspider
包有三个主要模块,pp
、mtd
和spider
^
}有一类^ {< CD26>},它帮助您从XICI免费IPS获得代理IP池。 请注意,几乎没有可用的IP可以工作,因此请尽量不要使用此模块。如果您想为您的蜘蛛使用代理IP,此代码可能有助于您编写自己的代理池。
mtd
有两个类,Crawler
和Downloader
Crawler
帮助您使您的蜘蛛多线程。Downloader
帮助您多线程下载东西,只要您在其中以list(zip(names, urls))
的形式传递url。
spider
有一个类MSpider
,它使用模块mtd
中的Crawler
,并且有一些基本的配置Crawler
,因此这是一种更容易将您的蜘蛛变成多线程蜘蛛的方法。
pp.ProxyPool
的用法
frommspider.ppimportProxyPoolpool=ProxyPool()# Once an instance of ProxyPool is initialized,# it will has an attribute named ip_list, which# has a list of IPs crawled from xici free IPs.print(pool.ip_list)"""{'http': ['HTTP://211.162.70.229:3128', 'HTTP://124.207.82.166:8008', 'HTTP://121.69.37.6:9797', 'HTTP://1.196.160.94:9999', 'HTTP://59.44.247.194:9797', 'HTTP://14.146.92.72:9797', 'HTTP://223.166.247.206:9000', 'HTTP://182.111.129.37:53281', 'HTTP://58.243.50.184:53281', 'HTTP://218.28.58.150:53281'], 'https': ['HTTPS://113.140.1.82:53281', 'HTTPS://14.23.58.58:443', 'HTTPS://122.136.212.132:53281']}"""# Randomly choose an IPprotocol="http"# or "https"ip=pool.random_choose_ip(protocol)print(ip)"""'HTTP://59.44.247.194:9797'"""# Update the IP listpool.get_ip_list()pool.check_all_ip()# Request an url using proxy by 'GET'url="http://www.google.com"res=pool.open_url(url)print(res.status_code)"""200"""# Request an url using post by 'POST'url="http://www.google.com"data={'key':'value'}res=pool.post(url,data)print(res.status_code)"""200"""
mtd.Downloader
的用法
frommspider.mtdimportDownloader# Prepare source data that need downloadnames=['a','b','c']urls=['https://www.baidu.com/img/baidu_resultlogo@2.png','https://www.baidu.com/img/baidu_resultlogo@2.png','https://www.baidu.com/img/baidu_resultlogo@2.png']source=list(zip(names,urls))# Download them!dl=Downloader(source)dl.download(out_folder='test',engine='wget')"""[INFO]: 3 urls in total.[INPUT]: BATCH SIZE: 1[INFO]: Open threads: 100%|███████████████| 3/3 [00:00<00:00, 3167.90it/s][INFO]: Task done.[INFO]: The task costs 0.3324 sec.[INFO]: 0 urls failed."""
使用spider.MSpider
请在Quick Start中查看。
功能
- 2.0.5版:
- 添加蜘蛛模板。一个是基于
spider.MSpider
,另一个是基于mtd.Crawler
。 - 将参数
batch_size
添加到spider.MSpider
和mtd.Crawler
。
- 添加蜘蛛模板。一个是基于
许可证
版权所有(c)2019 Tishacy。
根据MIT License授权。