范腾跃---第二次作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/ZhichengSoftengineeringPracticeFclass/homework/12532 |
这个作业的目标 | <学习Fiddler软件爬取功能以及python的简单编程> |
Github 地址 | https://gitee.com/fan-tengyue/fiddler-and-python |
一、Fiddler的爬取以及Python的简单编程
(1)解题思路描述
- 通过第一次作业学习了git以及GitHub使用,我对这节软件工程课充满了兴趣。特别是第二次作业让我通过爬虫爬取朴朴商品数据,也很符合我的味口。毕竟爬虫是当今社会一个比较热门的技术,而且在大专时候
我的大专老师也是通过vscode写Python爬虫来教我们爬取网易云的音乐,所以对此我对爬虫也是有所了解,刚好借用第二次作业来温习一下。 - 由于Fiddler这个爬虫工具我没有使用过,对此我上网查找了有关Fiddler的资料,了解了大概.Fiddler是强大的抓包工具,能够记录所有客户端和服务器的http和https请求,允许监视、设置断点。是一个比较方便的抓包工具
我们可以通过它来抓取朴朴商品接口,之后到python写简单的编码。
具体过程如下:
- 1、上Fiddler官网安装Fiddler,安装很简单,无脑下一步就完事,之后安装完需要注意一下事项:1、查看本地计算机ip地址,或者将鼠标移至本打开软件的右上角"Online x"即可获取ip。2、Windows必须得关闭“防火墙”,此软件允许远程连接。
之后下载pyCharm,PyCharm是Python的编译平台,而python是个解析器,它们两者相互支持,配合工作。 - 2、对Fiddler进行配置,打开cmd以管理员身份运行,输入ipconfig,查看本机ip地址。打开Fiddler,进入Tools-> Fiddler Options然后点击connections获取端口号,一般大家的端口号都是8888.做这些目的主要是我需要在移动端上安装证书,
这一步是为了让Fiddler能捕获HTTPS请求。如果你只需要截获HTTP请求,可以忽略。 - 3、完成了上面步骤,接下来就比较轻松了。主要用电脑微信开扑扑小程序,通过手机开热点(注意:由于校园网不允许Fiddler软件使用,所以建议热点)用Fiddler寻找需要商品的地址。商品地址返回的数据需要用json解析,我通过python解析工具
将数据解析成完整的代码,方便后序在PyCharm中编写Python代码。
- 4、最后找到需要商品的统一用户代理,以及商品地址到pyCharm上通过url请求数据,之后你就可以开始用Python代码实现扑扑商品价格波动。
(2)代码展示
import random
import time
import requests
import urllib3
import datetime
# 用Fiddler爬取用户代理和商品地址
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
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/ed60af11-25b0-48b8-bc5b-f9136d9f89ad'
# 根据url申请请求头
def getPupu():
# 设计获取价格波动时间
result = requests.get(url, headers=headers, verify=False)
return result
randoms=random.randint(2,6)
time.sleep(randoms)
# 运用json方法解析字典
result = getPupu()
s = result.json()
PuPuNo = s['data']['name']
PuPuSpec = s['data']['spec']
PuPuPrice = s['data']['price']/100
market_price = s['data']['market_price']/100
title = s['data']['share_content']
# 输出商品规格
print("-------------------商品: "+PuPuNo+"-------------------------------")
print("规格: "+PuPuSpec)
print("价格: "+str(PuPuPrice))
print("原价/折扣价: "+str(market_price)+"/"+str(PuPuPrice) )
# print("详细内容: "+title)
print("-------------------------商品: "+PuPuNo+"的价格波动--------------------------------")
# 运用while()循环实现价格波动
if __name__ == '__main__':
while (1):
result = getPupu()
PuPuPrice = s['data']['price']
time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print("当前时间为" +time+ ", 价格为" + str(PuPuPrice/100))
(3)最终效果
(4)commit提交gitee(要求5或5次以上)
(5)遇到的问题
- pyCharm软件使用python中request一直标红线,运行时出现No module named requests。之后上网发现只需将cmd切到python安装路径执行pip install requests,就能解决问题。
- 获取扑扑商品价格波动时过快问题,由于这是爬取别人的商品软件,说难听点不正当的事情,可能获取过快,会导致ip被封问题。所以我想到办法是导入random方法设一个1到10的随机数,然后通过time.sleep(random),来实现扑扑商品价格的缓慢输出。
是否有优化改进,描述你改进的思路 、
目前没有优化改进,通过这次作业我发现我还有很多的不足,需要我继续发时间学习,提高代码量。
二、总结
我之前大专是学习计算机应用技术的,主要是偏向web开发。其实对python很是陌生,基础作业都是通过我临时学习完成的,所以我实力不足只能完成第一题,但是我并不会感到痛苦,因为比我强的同学有很多,他们也是发时间去学习去揣摩,才能有如今的成果。
既然我没有选择计算机应用技术而是选择软件工程这个专业,就是因为我要好好学一门技术,虽然途中会有困难,我也要战胜困难,要去适应多种挫折,反正好好学最终都会有好的结果的。