美文网首页
pyspider web爬虫框架

pyspider web爬虫框架

作者: 优秀的人A | 来源:发表于2019-03-11 20:15 被阅读25次

    pyspider简介

    官方文档:http://docs.pyspider.org/

    中文网址:http://www.pyspider.cn/book/pyspider/

    最新版本: https://github.com/binux/pyspider/releases

    • PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。在线示例: http://demo.pyspider.org/

    • pyspider是作者之前做的一个爬虫架构的开源化实现。主要的功能需求是:

    • 抓取、更新调度多站点的特定的页面

    • 需要对页面进行结构化信息提取

    • 灵活可扩展,稳定可监控 而这也是绝大多数python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各种网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件往往不够灵活,于是,通过脚本去控制抓取是我最后的选择。 而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了这套框架

    pyspider的设计基础是:以python脚本驱动的抓取环模型爬虫
    • 通过python脚本进行结构化信息的提取,follow链接调度抓取控制,实现最大的灵活性

    • 通过web化的脚本编写、调试环境。web展现调度状态

    • 抓取环模型成熟稳定,模块间相互独立,通过消息队列连接,从单进程到多机分布式灵活拓展

    开启编写一个pyspider项目
    from pyspider.libs.base_handler import *
    import pymongo,pymysql
    class Handler(BaseHandler):
    """
    Handler 就是 pyspider 爬虫的主类,我
    们可以在此处定义爬取、解析、存储的逻辑。
    整个爬虫的功能只需要一个 Handler 即可完成
    """
    
    #crawl_config 属性。我们可以将本项目的
    #所有爬取配置统一定义到这里,如定义
    #Headers、设置代理等,配置之后全局生效
    crawl_config = {
    }
    #mongodb数据库连接
    mongocli = pymongo.MongoClient(host='localhost', port=27017)
    db = mongocli['jobbole']
    jobbolearticle = db['jobbolearticle']
    
    #mysql数据库连接
    client = pymysql.Connect(
    'localhost','root','ljh1314',
    'class1804',charset='utf8'
    )
    cursor = client.cursor()
    #on_start() 方法是爬取入口,初始的爬取
    #请求会在这里产生
    @every(minutes=24 * 60)
    def on_start(self):
    self.crawl('http://blog.jobbole.com/all-posts/', callback=self.index_page)
    
    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        print(response)
        for each in response.doc('a[class="page-numbers"]').items():
            self.crawl(each.attr.href, callback=self.detail_page)
    @config(priority=2)
    def detail_page(self, response):
        self.index_page(response)
        list = response.doc('#archive .post.floated-thumb')
        # print(list)
        for item in list.items():
            print('拿到了数据')
            print(type(item))
            title = item('a.archive-title').text()
            url = item('a.archive-title').attr.href
            print(title,url)
            return {
                'title':title,
                'url':url,
            }
    #方法中return的结果会执行on_result
    def on_result(self,result):
    #可以在这里做数据的持久化
    print(result)
    
    #mysql数据库存储
    sql = """
    INSERT INTO jobbole()
    VALUE (%s,%s)
    """
    try:
        self.cursor.execute(sql,[result['title'],result['url']])
        self.client.commit()
    except Exception as err:
        print(err)
        self.client.rollback()
    
        #mongodb数据库存储
        self.jobbolearticle.insert(result)

    相关文章

      网友评论

          本文标题:pyspider web爬虫框架

          本文链接:https://www.haomeiwen.com/subject/tvlipqtx.html