• python爬虫---爬虫的数据解析的流程和解析数据的几种方式


    python爬虫---爬虫的数据解析的流程和解析数据的几种方式

    一丶爬虫数据解析

    概念:将一整张页面中的局部数据进行提取/解析

    作用:用来实现聚焦爬虫的吧

    实现方式:

    正则 (针对字符串)
    
    bs4
    
    xpath (最常用)
    
    pyquery   " https://www.jianshu.com/p/770c0cdef481"  # 有待查询
    

    数据解析的通用原理是什么?

    标签的定位
    
    数据的提取
    

    页面中的相关的字符串的数据都存储在哪里呢?

    标签中间
    
    标签的属性中
    

    基于聚焦爬虫的编码流程

    1. 指定url
    
    2. 发起请求
    
    3. 获取响应数据
    
    4. 数据解析
    
    5. 持久化存储
    

    正则解析

    ### 使用python中的re模块进行正则匹配,对找到的指定数据进行数据解析
    
        # 例如:
            # text获取页面内容.
        	page_text = requests.get(url,headers=headers).text
        
            # 解析数据:img标签的src的属性值
        	ex = '<div class="text">.*?<img src="(.*?)" referrerPolicy.*?</div>'
        
            # ex 是正则表达式,page_text是获取的页面,flags=re.S表示不换行(一行查找,正则表达式会将这个字符串作为一个整体,在整体中进行匹配)
        	img_src_list = re.findall(ex,page_text,re.S)
    

    BS4解析

    # 概述BS4的用法
    	# 环境的安装:
            pip install bs4
            pip install lxml
            
    	# bs4的解析原理:
            实例化一个BeautifulSoup的一个对象,把即将被解析的页面源码数据加载到该对象中
            需要调用BeautifulSoup对象中的相关的方法和属性进行标签定位和数据的提取
    	
        # BeautifulSoup的实例化
            BeautifulSoup(fp,'lxml'):将本地存储的html文档中的页面源码数据加载到该对象中
            BeautifulSoup(page_text,'lxml'):将从互联网中请求道的页面源码数据加载到改对象中
    	
        # 标签的定位
    		 标签定位:soup.tagName:只可以定位到第一个tagName标签
    	  
    		 属性定位:soup.find('tagName',attrName='value'),只可以定位到符合要求的第一个标签
    			# findAll:返回值是一个列表。可以定位到符合要求的所有标签
    		 选择器定位:soup.select('选择器')
    			# 选择器:id,class,tag,层级选择器(大于号表示一个层级,空格表示多个层级)
    
    	# 取文本
    		text:将标签中所有的文本取出
    		 string:将标签中直系的文本取出
    	
        # 取属性
    		 tag['attrName']
    

    XPATH解析

    # 概述
    	# 环境的安装
    		pip install lxml
            
    	# 解析原理	
    		实例化一个etree的对象,且把即将被解析的页面源码数据加载到该对象中
    		调用etree对象中的xpath方法结合这不同形式的xpath表达式进行标签定位和数据提取
    
            
    	# etree对象的实例化
            etree.parse('fileName')
            etree.HTML(page_text)
    
            
    	# 标签定位
            最左侧的/:一定要从根标签开始进行标签定位
                
            非最左侧的/:表示一个层级
            
            最左侧的//:可以从任意位置进行指定标签的定位
            
            非最左侧的//:表示多个层级
            
            属性定位://tagName[@attrName="value"]
            
            索引定位://tagName[@attrName="value"]/li[2],索引是从1开始
            
            逻辑运算:
            	找到href属性值为空且class属性值为du的a标签
            	//a[@href="" and @class="du"]
            	模糊匹配:
            	//div[contains(@class, "ng")]
            	//div[starts-with(@class, "ta")]
    
    
    	# 取文本
    		/text():直系的文本内容
    		//text():所有的文本内容
    
    
    	# 取属性
    		/@attrName
    

    其他问题

    # 乱码问题
    	# 1. 先编码成 iso-8895-1 在解码
     img_name = img_name.encode('iso-8859-1').decode('gbk')
    
    
    # .bs4实现的数据解析中常用的方法和属性有哪些?各自的作用是什么?
        soup.tagName
        find/findAll()
        select()
        text/string
        tag['attrName]
            
    # .写出常用的xpath表达式?
        属性定位
        索引定位
        取文本
        取属性
    
  • 相关阅读:
    __slots__魔法,减少实例属性消耗的内存
    在函数中最好不要用可变类型当参数
    Python的容器模块
    实例和类变量以及类的魔术方法
    推导式
    Python内置函数
    常用的git操作(持续更新)
    h开头的
    e开头的
    如何迁移测试的MAGENTO到正式运行的MAGENTO
  • 原文地址:https://www.cnblogs.com/dengz/p/11651072.html
Copyright © 2020-2023  润新知