让你的蜘蛛多线程。

mspider的Python项目详细描述


mspider

License: MITPyversionVersion

一个多线程蜘蛛包装,可以使你的蜘蛛多线程容易,帮助你抓取网站更快。:zap:

请注意,这只适用于Python3。

安装

mspider可以使用pip轻松安装:

pip install mspider

快速启动

自动创建MSpider

  1. 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.
    
  2. 打开蜘蛛文件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

  3. 找到函数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
  4. 让蜘蛛开始爬行。

    $ 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

  1. 标准导入mspider。

    frommspider.spiderimportMSpider
  2. 定义单线程蜘蛛的功能。

    注意这个函数必须有两个参数。

    • 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
  3. 关键部分来了。创建MSpider的实例,并将spider函数和要爬网的源传递给它。

    sources=[('github','http://www.github.com'),('baidu','http://www.baidu.com')]mspider=MSpider(spi_func,sources)
  4. 开始爬行!

    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包有三个主要模块,ppmtdspider

  • ^ }有一类^ {< CD26>},它帮助您从XICI免费IPS获得代理IP池。

    请注意,几乎没有可用的IP可以工作,因此请尽量不要使用此模块。如果您想为您的蜘蛛使用代理IP,此代码可能有助于您编写自己的代理池。

  • mtd有两个类,CrawlerDownloader

    • 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.MSpidermtd.Crawler

许可证

版权所有(c)2019 Tishacy。

根据MIT License授权。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
相当于加密流。NET在Java 安卓中的应用?   java Android:加载片段时启动动画   java文件从指定的绝对路径上载到服务器   java是否可以自定义Spring缓存抽象所使用的序列化?   当客户端输入为无效字符串时,java从JAXWS接收空的BigDecimal   将数据库从MySQL更改为SQLite后出现Java项目错误   java PrimeFaces在datatable中自定义行编辑器   java在数组中对字符串和双类类型进行排序   图像Java:如何在GridLayout中嵌套JPanel?   java searchByEmail方法不起作用   java运行时。exec(字符串)限制字符串   java通过异步运行lambda访问方法参数   java为什么这个条件语句不编译?   在javajar中添加和使用文件,就像它们在文件夹中一样   使用java查找带有正则表达式的子字符串   在awt所在的地方荡秋千。属性,以及如何在Java插件中提供它的本地化版本