许海涛---第二次作业
这个作业属于哪个课程 | 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上查询了相关资料,先对抓包也就是所谓的爬虫有一个大概的了解,这里附上链接。
- CSDN:https://blog.csdn.net/I39mOK/article/details/78562582?ops_request_misc=%257B%2522request%255Fid%25
接着在小破站上系统性的学习了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的网络被禁用了,其他软件都可以正常使用,看来应该是朴朴的反爬机制。最后还是选择了客户端微信的小程序可正常操作。写代码时,也有些许问题,也去网上查询了一些资料进行参考,还好都迎刃而解了。总而言之,本次作业让我学到了很多新知识,收益匪浅,希望接下来能更进一步的提升自我。 (由于能力与时间有限进阶、高阶目前正则研究中,一有成果便补充上)