zoukankan      html  css  js  c++  java
  • Python基础知识回顾及scrapy框架爬虫基础

    1.函数
      函数参数:必须 默认 关键 可变
      函数种类:外部 内部 匿名 lambda
      装饰函数:@语法糖
      函数总是要返回的 ,若没有return,None总是被返回
     
    2.面向对象:
      对象:已存在,可被使用的实例 万物皆对象
      类:描述其他实例信息的对象
      方法:定义其他实例行为的对象
    3.与函数区别:
      函数可以直接调用
      方法需要依赖类对象才能调用
     
    @staticmethod 类似函数
    @classmethod 类方法
    属性:定义其他实例特征的对象
    stu=Student()
    stu.jump=lambda x: print("你跳了{0}米“.format(x))
    stu.jump(1)
     
    4.常用模块:
      re(正则) xml time threading socket random pickle (序列化) os sys
      pdk:----python sdk
      第三方: scrapy pandas numpy plot..
      scrapy:爬虫框架 特点:工业化重量级
          xpath:通过path风格的表达式来解析xml HTML
          /html/body[](取属性)//(后代)div ,/当前路径
     
    scrapy框架爬虫基础及案例
      爬虫流程图
     
    流程过程:spider(蜘蛛)编写-->引擎(engine)获取请求-->传入调度器(scheduler排序入队)-->请求(request)给引擎-->下载器网上扒取数据-->
         将响应(response)给引擎-->蜘蛛-->通过引擎-->将获取的实体类给item,将接下来的URL给调度器-->再次循环以上过程完成数据的扒取
     
      对蜘蛛spider的编写和解析
    import  scrapy  #导入scrapy 的模块
    class QuotesSpider(scrapy.Spider): #类方法继承scrapy模块的spider
        name = 'kgc'            #蜘蛛名 (后面需要执行方式之一所需)
        start_urls=['http://www.kgc.cn/',] #所需要爬虫的资源进口
        def parse(self, response):  #parse方法定义爬虫的规则
            datas=response.css('h2.headline-title~ul>li>p>a::text').extract()#应用css样式方法,寻找对应的爬取模块
            for d in datas:
                print(d)

    在命令窗口terminal中输入运行命令:

    scrapy runspider spid文件名

    输出结果可以获取相应内容。

    对于连接路径内容的获取如下:

    import  scrapy  #导入scrapy 的模块
    class QuotesSpider(scrapy.Spider): #类方法继承scrapy模块的spider
        name = 'kgc'            #蜘蛛名 (后面需要执行方式之一所需)
        start_urls=['http://www.kgc.cn/',] #所需要爬虫的资源进口
        def parse(self, response):  #parse方法定义爬虫的规则
            hrefs = response.css('h2.headline-title~ul>li>p>a::attr("href")').extract()#获取的是对应的连接路径
            for url in hrefs:
                yield  response.follow(url,self.ta)#使用yield生成器,通过response的follow方法,传参分别为得到的路径和得到内容的方法
    
        def ta(self,response):#定义当前对象所需要获取内容的方法
            titl=response.css('div.essay_top>h6::text').extract_first()#应用css样式获取内容标题
            author=response.css('div.essay_card.f1>span::text').extract_first()#获取内容的作者
            yield {                 #生成器每次调用得到内容
                "title":titl,       #获取的以字典格式输出
                "author":author
            }

    同样执行spider运行语句:

    scrapy runspider spider文件名

    如果在运行得到结果的过程中,遇到无法输出或者乱码问题,可通过生成json文件进行运行:

    步骤如下:

    将spider文件生成json文件,执行语句为:

    scrapy runspider spider文件名  -o  文件名.json

    然后对其进行解析:

    import json            #引入json模块
    with open("test.json") as f :#读取文件并重命名f
        da=json.load(f) #文件重新加载得到da
        for s in da:  #循环输出内容
            print(s)

    运行文件即可得到相应内容。后续内容持续更新。

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    LOJ #6183 看无可看
    BZOJ 5467 Slay the Spire
    BZOJ 5306 [HAOI2018] 染色
    BZOJ 2784 时间流逝
    BZOJ4911: [Sdoi2017]切树游戏
    min-max 容斥
    BZOJ 5475: [WC 2019] 数树
    BZOJ 2810 [Apio2012]kunai
    Codeforces round 1083
    详解大数据数据仓库分层架构
  • 原文地址:https://www.cnblogs.com/qianshuixianyu/p/9210448.html
Copyright © 2011-2022 走看看