许海涛---第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass/homework/12532
这个作业的目标 <学会使用FIddler抓包、json解析以及使用代码对抓取到的数据进行排版输出,以及养成良好的编码习惯>
Github 地址 https://gitee.com/xht1017/tt212106788.git

前提工作概述

由于是首次接触抓包,因此先去CSDN上查询了相关资料,先对抓包也就是所谓的爬虫有一个大概的了解,这里附上链接。

接着在小破站上系统性的学习了Fiddler抓包工具的使用,并进行实测。

本次编码选择的语言为python,之前在大专期间有稍微学习过。由于长时间未使用,大部分内容都已忘记,于是又花了一定量的时间进行一个简单的复习。最后,正式展开本次作业项目的工作。


1.使用Fiddler工具进行抓包,json解析

  • 首先,通过微信客户端小程序打开朴朴商城选择指定商品
  • 配置Fiddler的Tools工具中的Option选项,启用捕获HTTPS链接。接着正式使用Fiddler工具开始抓包以获取对应的url与请求头,查看json解析获取需要的信息


2.使用pycharm开发环境进行编码

  • 配置从fiddler中获取的网页链接与请求头
  • 请求网页并设置编码
  • 主方法获取商品属性,并使用json解析转化字典格式,并排版输出展示商品信息
  • 设置输出频率,实现监听价格变动
  • 最终效果

完整代码

import json
import time
import requests

# 朴朴商品网址
url = 'https://j1.pupuapi.com/client/product/storeproduct/detail/' \
  '7c1208da-907a-4391-9901-35a60096a3f9/67ad68ce-9f41-4dbd-b6ef-823390ed2e7b'
# 请求头
head = {
'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'
}

# 网页请求并设置编码
def demand():
    response = requests.get(url, headers=head)
    response.encoding = 'utf-8'
    return response

# 将获取到的内容转化成字典格式,并获取商品相应属性
# 属性:商品名称、价格、规格、原价、商品简介
def getvalue():
    obtain = demand().text
    digital = json.loads(obtain)
    productdata = digital.get('data')
    pname = productdata.get('name')
    pprice = productdata.get('price')
    pspec = productdata.get('spec')
    orprice = productdata.get('market_price')
    detail = productdata.get('share_content')
# 输出排版
print('-------------------------------商品: ' + pname + '------------------------------------------''\n'
    '规格:' + pspec + '\n'
    '价格:' + str( format(float(pprice) / 100)) + '元' + '\n'
    '原价/折扣:' + str(format(float(orprice) / 100)) + '元' + '/' + str(format(float(pprice) / 100)) + '元' + '\n'
    '详情内容:' + detail + '\n'
    '-------------------------------' + pname + '' + pspec + '的价格波动------------------------------')

# 二次请求并将转化后的价格输出,观察价格浮动
while (1):
    # 设置输出频率
    time.sleep(6)
    response = requests.get(url, headers=head)
    response.encoding = 'utf-8'
    obtain = response.text
    digital = json.loads(obtain)
    productdata = digital.get('data')
    pprice = productdata.get('price')
    print('当前时间为' + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + ', 价格为' + str(
        format(float(pprice) / 100)) + '元')

if __name__ == '__main__':
    demand()
    getvalue()

3.使用Gitee push&commit 代码


总结

   本次作业的基础部分顺利完成,当然少不了磕磕碰碰,例如使用fiddler抓包工具时,校园网  处于断开状态,只能通过移动端开热点解决问题。一开始打算使用移动端app作为抓包的抓取对象,给手机配置了代理等等,一系列操作下来发现朴朴app的网络被禁用了,其他软件都可以正常使用,看来应该是朴朴的反爬机制。最后还是选择了客户端微信的小程序可正常操作。写代码时,也有些许问题,也去网上查询了一些资料进行参考,还好都迎刃而解了。总而言之,本次作业让我学到了很多新知识,收益匪浅,希望接下来能更进一步的提升自我。 (由于能力与时间有限进阶、高阶目前正则研究中,一有成果便补充上)

posted @ 2022-03-19 10:57  WalkingHormone  阅读(54)  评论(0编辑  收藏  举报