热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

叶子圣第二次作业

叶子圣-第二次作业这个作业属于哪个课程https:edu.cnblogs.comcampusfzzcxyZhichengSoftengineeringPracticeFclass这

叶子圣-第二次作业





















这个作业属于哪个课程https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass/
这个作业要求在哪里https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass/homework/12532
这个作业的目标<爬虫>
Github 地址https://gitee.com/yezisheng0614/zhicheng-soft/commits/master

一、准备工作



  • 安装python:https://www.python.org/ftp/python/3.10.2/python-3.10.2-amd64.exe

  • 安装pycharm:http://www.jetbrains.com/pycharm/download/#section=windows

  • 安装fiddle


二、爬虫实现思路



  • 对访问的网页使用fiddle进行抓包

  • 爬取到的数据使用python进行解析


三、项目开始




  • 一、朴朴数据




    • 1.使用fiddle抓取数据


      • 查看分析fiddle抓取到的所有包,选出所对应的j son,复制链接






    • 2.在浏览器中查看所复制的链接


      • 分析j son中所需要的数据,挑选出来,如:

        ​ 1)字典中的“price”对应我们需要的价格

        ​ 2)“market_price”就是我们需要的原价格










  • 3、Python编程


    • 使用python对我们挑选出的数据进行分析:

      ​ 1)将j son的头文件(User-Agent)复制出来放在一个变量中,后面对其进行请求时有用

      ​ 2)将请求的链接放在一个变量中,使用 requests.get() 对链接进行请求前需要导入requests包(第一次使用python没有导入对应的包,需要对其导包,我查阅了资料后才明白:pycharm导包)

      ​ 3)根据刚才在网页中所需要挑选出来的数据(一组键值对),因为j son 内是使用字典进行数据存储,所以我使用键值对将所需数据取出存入变量中,之后以一定的格式打印输出

      headers = {
      # 浏览器类型
      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 '
      'Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat '
      }
      url = 'https://j1.pupuapi.com/client/product/storeproduct/detail/4dcdeca2-f5a3-4be8-9e2f-e099889a23a0/81435282-9e9e' \
      '-4d08-afac-0da2adf73cf7 '
      # 对URL地址发送请求
      respOnse= requests.get(url, headers=headers).json()
      data = response['data'] # 需要的数据
      name = data['name'] # 名称
      spec = data['spec'] # 规格
      price = str(data['price'] / 100) # 价格
      market_price = str(data['market_price'] / 100) # 原价
      cOntent= data['share_content'] # 详细内容
      print('---------------商品:' + name + '---------------')
      print('规格:' + spec)
      print('价格:' + price)
      print('原价/折扣价:' + price + "/" + market_price)
      print('详细内容:' + content + '\n')
      print('---------------”' + name + '“价格波动---------------')
      for priceFluctuation in range(1, 5): # 多次请求查看价格波动
      respOnse= requests.get(url, headers=headers).json()
      price = str(data['price'] / 100)
      print('当前时间为' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + ',价格为' + price)







  • 二、知乎收藏夹




    • 一爬再爬:

      ​ 主要的思路跟爬取朴朴数据没有区别,唯一的区别是知乎收藏夹链接进入之后里面还有很多收藏的内容,这样解析的难度就大了一点。

      ​ 将j son 用fiddle抓出之后进行查看





​ 它的data数组中有5个数组,每个数组都有固定的id值,每个收藏夹链接中间用id值来区分,这样就可以使用for循环对每个收藏夹进行抓包分析。抓了两个收藏夹的j son之后发现每个收藏夹的j son都有共同点:
​ https://www.zhihu.com/api/v4/collections/790324691/items?offset=0&limit=20
​ https://www.zhihu.com/api/v4/collections/790324691/items?offset=0&limit=20
发现了吗?区别在于中间,中间这个使用的不就是每个收藏夹的data数组中的id值吗?这就可以将id值作为变量进行解析。
解析出的j son 文件如下

​ 这次的j son 比以往的相对繁杂,我在翻阅同学们提交的作业中,发现方晓佳同学使用的一个工具令我眼前一亮! 于是我上网随机选用一个软件进行解析。

这个工具能够对j son 文件进行树状解析,这大大减轻了我的工作负担,解放了我的双眼!


  • 编程



    1. 对爬来的收藏夹 j son 发送请求,然后将获得的数据进行循环得到每个收藏夹 id 和 title 保存在变量中

    2. 对每个收藏夹抓到的 j son 再次发送请求,将得到的内容的标题和链接保存在变量中

    3. 最后进行输出打印

    代码如下:

    #请求头
    headers = {
    # 浏览器类型
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
    'Chrome/99.0.4844.51 Safari/537.36 '
    }
    #链接
    url = 'https://www.zhihu.com/api/v4/people/um-ah/collections?include=data%5B*%5D.updated_time%2Canswer_count' \
    '%2Cfollower_count%2Ccreator%2Cdescription%2Cis_following%2Ccomment_count%2Ccreated_time%3Bdata%5B*%5D.creator' \
    '.vip_info&offset=0&limit=20 '
    #返回请求的json
    respOnse= requests.get(url=url, headers=headers).json()
    #得到收藏夹数据
    fav_data = response['data']
    #循环数据内容
    for i in range(0, len(fav_data)):
    #收藏夹id
    fav_id = str(fav_data[i]['id'])
    #收藏夹标题
    fav_title = str(fav_data[i]['title'])
    print('--------------------------' + fav_id + ':' + fav_title + '--------------------------')
    #请求每个收藏夹
    url = 'https://www.zhihu.com/api/v4/collections/' + fav_id + '/items?offset=0&limit=20'
    respOnse= requests.get(url=url, headers=headers).json()
    #获取收藏夹内的数据
    ques_data = response['data']
    #循环打印收藏夹的内容
    for j in range(0, len(ques_data)):
    ques_title = ques_data[j]['content']['question']['title']
    ques_url = ques_data[j]['content']['question']['url']
    print(ques_title + ":" + ques_url)



  • 三、git commit提交到gitee库中




四、遇到的难题



  • 使用夜神模拟器成功安装证书,但是安装了不生效,进过百度查阅资料,初步判定是安卓9.0的版本不认可用户安装的证书,只允许系统证书生效,果断放弃模拟器,转而使用微信小程序进行抓包。



  • pycharm进行安装依赖包时,由于使用的是国外源,于是我百度得知使用cmd pip进行安装到pycharm依赖包lib中




五、总结

​ 第一次使用python语言不懂的基础语法,于是我上网搜索了dalao的博客教学学习了基础语法之后对,因为我先前有学习java所以python这门语言很快有了初步理解。但是对于爬虫这一块还是比较陌生,跟着林伟强同学在学习群里发的b站教程学习,了解到了request请求和fiddle抓包结合使用可以有很奇妙的效果!通过这次学习我对于一门新的语言获得到的收获感到十分的兴奋,感受到了python的魅力,我今后会更加深入的学习、理解python!

​ 另外傅老师说的很对,我对于这门课程的时间花费了不止一周2小时了,我估计最起码一周有4天了......0.o



推荐阅读
  • 作者:xinxin随着GIS行业的发展,越来越大的数据应用于移动端,但相比PC端,同一份大小的数据在移动端显示要比在PC端慢 ... [详细]
  • 这篇文章主要讲解了“AliyunLinux如何安装php7.3tengine2.3.2mysql8.0redis5”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着 ... [详细]
  • tengine(nginx)部署文档
    环境:centos67安装(1)安装更新所需组件工具#yumupdate#yuminstallgccgcc-c++autoconfautomake(2)准备安装包tengine-2 ... [详细]
  • 耳返概述:耳返主要实现监听的功能,在低延时的情况下可以给主播一个比较真实音频的反馈,在演唱会等专业场景里比较常用。技术实现上来说就是要时时的把录制进的音频数据立刻播放出去,当然这个 ... [详细]
  • 支付宝老的wap支付接口支付交易处理失败,请稍后再试。(ALI14)
    支付宝老的wap支付接口支付交易处理失败,请稍后再试。(ALI14)service:alipay.wap.trade.c ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • mapbox 修改初始位置_⑩的游戏修改小课堂1——WinDepth
    咱今天比较闲,所以来误人子弟啦~来讲一讲如何用CheatEngine与OllyDBG来修改简单的小游戏~当然,这是只最初级的修改(露米娅比 ... [详细]
  •    最近有一项目需要移植到Linux下,功能简单来讲就是FTP上传+HTTP下载。   由于Windows操作系统中,文件名是不区分大小写的,而Linux系统是大小写敏感,导致对 ... [详细]
  • VNPY  软件架构分析
    VNPY架构设计文档版本日志:一.引言编写目的:该软件概要设计说明书是“VNPY”开发中的重要文献资料,所完成的工作是将需求说明书中的数据流图转化成软件结构和数据结构,为后续进行详 ... [详细]
  • Java开发人员知道Java语言并不总是每种任务的最佳语言。今年的JRuby和Groovy的1.0版本发行了对向Java应用程序添加动态语言的兴趣。借助Groovy, ... [详细]
  • 0.Linux环境搭建 ... [详细]
  • 作为目前最火的应用,Docker确实存在着其独到之处,无论是程序猿还是运维都应该听说过Docker的大名,Docker已经走过了许多的坑,目前最新版本是v1.11.0版本,应该说是 ... [详细]
  • ObjectiveC 基础教程第六章,源文件组织
    Object-C基础教程第六章,源文件组织0x00:前言到目前为止,我们讨论过的所有项目都是把源代码统统放入到了main.m文件中。这样随着项目越来越大,文件内容会越来越多,到后面 ... [详细]
author-avatar
Andyxiesz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有