• 爬虫数据解析


    1、今日学习提纲

        聚焦爬虫、正则、bs4、xpath

    2、聚焦爬虫:爬取页面中指定的页面内容

      --编码流程:

        --指定url

        -- 发起请求

        --获取响应数据

        --数据解析

        --持久化存储

    3、数据解析分类

        --正则

        --bs4

        --xpath(*****   通用性最强)

    4、数据解析原理概述

      解析的局部的文本内容都会在标签之间或标签对应的属性中进行存储

         1、进行指定标签的定位

         2、标签或者标签对应的属性中存储的数据值进行提取

    5、实操练习

      1、使用正则进行数据解析

        1、爬取根据url爬取糗事百科的糗图板块下一张糗事图片     

    import requests
    import json
    if __name__ == "__main__":
        url = 'https://www.qiushibaike.com/article/123267647'
        # content 二进制的图片
        # text  字符串   content 二级制   json  对象
        img_data = requests.get(url = url).content
        with open('./qiutu.jpg','wb') as fp:
            fp.write(img_data)

        2、爬取糗事百科的糗图板块下所有的糗事图片    

                    一个小错误: UnicodeEncodeError: 'latin-1' codec can't encode character 'u2026' in position 30: ordinal not in range(256)  百度查了下
          可能是因为爬虫的User-Agent的地址太长了有省略号 。。。。

    import requests,re
    import os
    import json
    #爬取糗事百科中糗图模块下所有的糗图图片
    if __name__ == "__main__":
        #创建文件夹,用于保存所有的图片
       if not os.path.exists('./qiutulibs'):
            os.mkdir("./qiutulibs")
       url ="https://www.qiushibaike.com/imgrank/"
       headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }
       #使用通用爬虫对url对应的一整张页面进行爬取,得到源码数据
       page_text = requests.get(url=url,headers=headers).text
       #使用聚焦爬虫将页面中所有的糗图进行解析/提取
       #  提取div的img标签
       ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
       #re.S  单行匹配    re.M  多行匹配
       img_src_list = re.findall(ex,page_text,re.S)
       for src in img_src_list:
           #拼接出完整的图片地址
           src = "https:"+src
           #发get请求
           img_data = requests.get(url = src,headers=headers).content
           #生成图片名称
           img_name = src.split("/")[-1]
           imgPath = './qiutulibs/'+img_name
           with open(imgPath,'wb') as fp:
               fp.write(img_data)
               print(img_name,"下载成功")

         3、通用模板

    import requests,re
    import os
    import json
    #爬取糗事百科中糗图模块下所有的糗图图片
    if __name__ == "__main__":
        #创建文件夹,用于保存所有的图片
       if not os.path.exists('./qiutulibs2'):
            os.mkdir("./qiutulibs2")
       #设置一个通用的url模板
       url ="https://www.qiushibaike.com/imgrank/page/%d/"
       #pageNum = 2
       headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }
       for pageNum in range(1,3):
           new_url = format(url%pageNum)
           #使用通用爬虫对url对应的一整张页面进行爬取,得到源码数据
           page_text = requests.get(url=new_url,headers=headers).text
           #使用聚焦爬虫将页面中所有的糗图进行解析/提取
           #  提取div的img标签
           ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
           #re.S  单行匹配    re.M  多行匹配
           img_src_list = re.findall(ex,page_text,re.S)
           for src in img_src_list:
               #拼接出完整的图片地址
               src = "https:"+src
               #发get请求
               img_data = requests.get(url = src,headers=headers).content
               #生成图片名称
               img_name = src.split("/")[-1]
               imgPath = './qiutulibs2/'+img_name
               with open(imgPath,'wb') as fp:
                   fp.write(img_data)
                   print(img_name,"下载成功")

        

        

      

    想什么,就有什么,聚焦优秀
  • 相关阅读:
    C# datatable 与 xml文件之间的转换
    服务器能访问共享,但是ping不通解决方案
    Oracle报错,ORA-28001: 口令已经失效
    解决苹果虚拟机安装过程中出现的问题
    安卓WiFi基本使用
    自定义Adapter
    listview学习之simpleadapter详细介绍
    listview学习之arrayadapter初探
    listview学习之初探adapter
    专注,追求卓越!
  • 原文地址:https://www.cnblogs.com/sunflying/p/13191573.html
Copyright © 2020-2023  润新知