伍威全---第二次作业
这个作业属于哪个课程 | 至诚软工实践F班 |
---|---|
这个作业要求在哪里 | 第二次作业:个人编程 |
这个作业的目标 | 了解抓包,并用抓包工具fiddler抓取朴朴的商品数据,并展示出来 |
GitHub 地址 | 我的GitHub |
写在前面:
首先这是我第一次抓包,使用抓包工具;很多人包括我可能都或多或少听说过抓包,但是并没有具体的实现或者尝试;这次的作业可以说是我的一项新的体验和挑战,如何使用fiddler工具,选着什么语言能更好地解析并输出抓取的内容等都是我需要考虑的,我也借着这篇博客来讲讲我在完成这次作业中使用的方法,遇到的问题以及如何的解决等等... 当然,我的作业内容也并不是十分完美,因此这篇博客也仅仅作为自己和想要了解的同学的参考。
任务:使用fiddler抓包工具+代码,实时监控“朴朴”上某产品的详细价格信息
一、解题思路:
-
利用fiddler抓包工具,该工具可以实现获取你当前访问页面的相关信息。
-
在初次使用fiddler时,你需要先设置fiddler的远程连接配置,在Tools-->Options-->Connections中进行配置。
-
如你需要抓取的是手机上的相关APP资源,你需要将手机的Wifi与电脑上的网络连接在相同局域网下并在手机端设置代理,同时也要安装fiddler的证书
-
本次抓取朴朴的数据我使用的是直接在PC端中微信的“朴朴”小程序直接访问
-
当你访问程序或网站时,一般fiddler显示的第一条数据就是我们要找的。(当然也并不是觉得,你还是需要耐心点去找找看JSON数据是否有你想要的信息)
-
当抓取完数据后接着就是选着需要的编程语言来解析数据并输出想要的内容了。(这里我使用的是Python,因为我认为相比Java等其他语言,Python更便利,网上的案例资源也相对多点<毕竟要爬虫,肯定要找大蟒 -_-!>)
二、实现过程:
- 下载Python,配置Python环境。推荐官网下载 --> Python官网(记住下载时要下载.exe文件,别下成了源码,又大又费时<当然你要研究研究另说>)
- 下载用于编写Python的编译工具pyCharm --> PyCharm: the Python IDE for Professional Developers by JetBrains
- 新建项目,新建python文件。
- 创建类,在类中编写实现的方法,以及运行的方法。
- 部分方法的展示:
~~初始化方法 (init)
def __init__(self):
# 所抓取的网页的url
self.url="?????"
self.headers = {
# ...
# 在headers中的User-Agent表示为网站的代理(最主要)
"User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/53.0.2785.143Safari/537.36MicroMessenger/7.0.9.501NetType/WIFIMiniProgramEnv/WindowsWindowsWechat",
# ...
}
~~商品信息输出方法(getGoods)
def getGoods(self,name,price,price_guide,spec,sub_title):
# {}起到了占位符的作用,运用format的方法来将参数添加到占位符中
theName = '----------------商品:{}----------------'.format(name)
theSpec = '规格:{}'.format(spec)
thePrice = '价格:{}'.format(price/100)
thePrice_Guide = '原价/折扣价:{}/{}'.format(price_guide/100,price/100)
theTitle = '详细内容:{}'.format(sub_title)
print(theName,'\n',theSpec,'\n',thePrice,'\n',thePrice_Guide,'\n',theTitle)
~~商品价格的实时变动方法(getPrice)
def getPrice(self,price):
# %Y-%m-%d %H:%M:%S 为时间的输出格式
curtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
thePrice = '价格为:{}'.format(price)
print('当前时间为',curtime,',',thePrice)
# 间隔10秒 sleep方法用来间隔时间
time.sleep(10)
~~提取JSON数据的关键字来获取“朴朴”小程序中商品的信息
for i in range(value):
names.append(res['data']['products'][i]['name'])
price.append(res['data']['products'][i]['price'])
price_guide.append(res['data']['products'][i]['price_guide'])
spec.append(res['data']['products'][i]['spec'])
sub_title.append(res['data']['products'][i]['sub_title'])
self.getGoods(names[i],price[i],price_guide[i],spec[i],sub_title[i])
以上是我展示的一小部分代码,具体的实现步骤和完整代码我以上传到我的GitHub中,欢迎大家查看(特别:我之前也并没有接触过python语言,这也是我的第一个python代码,如有不规范或是不正确的地方欢迎大家指出。)
-
结果展示:
为了结果展示的方便我将实时价格监控的时间调整到每3秒显示一次,一个商品查询5次价格
三、git过程:
以上是我本次任务的其中两次git截图,总共git了三次信息到GitHub上,其中第二次的没有截图。前两次我git的内容分别是:显示输出解析后的JSON内容以及试用for循环输出商品的相关信息;第三次我将完整的代码git到了GitHub中。
(上图是我的GitHub截图,不过不知为什么我上传的git只能查看最后一次的,前两次的无法看到记录)
四、问题与解决:
1)
问题:这个问题是有关使用fiddler抓取数据的,我暂时还没遇到,不过是有身边的同学有遇到过,因此我就先拿来讲讲。大家在使用fiddler时,我们的校园网是会断开的,因此通常会直连手机热点,而且大多数人刚开始都使用模拟器进行“朴朴”APP数据的抓取,但是很多时候我们在抓取是会遇到一直加载不出内容信息,导致抓取失败。
解决:主要的问题我这里也并不明白,但是在我看来,使用模拟器安装证书可能难以检测到底是否成功安装,而且在浏览网页时也会一直跳出“证书安装”的提示,因此我对这一任务是不推荐使用模拟器来抓取的,当然如果有用模拟器成功抓取数据的当我没说,我反正选着的是PC端的微信“朴朴”小程序。
2)
问题:在代码中我们所要的header信息里,从fiddler上复制进来会显示排版异常以及一些灰色的波浪线提醒
解决:从fiddler中复制到代码里的信息通常还是需要稍微编排下的,不仅看到舒服,而且对于用python这类要求格式不是很强烈的语言来说,更明确的排版能使得程序运行时减少不必要的异常,当然如果有灰色的波浪线提示的话,一般就是你的编排有问题或者一些名词没用到等等。
3)
问题:在使用python语言编写代码时,还是会因为对一些语法掌握的不熟练导致出错。例如:while语句后跟着的条件
解决:经过网络搜索以及比对后才发现,while的条件语句中如果有比较运算符,是需要与其他变量进行空格分开的,不然的话编译是会正常运行,但是就是达不到想要的效果,while语句就会进入死循环。
五、关于改进或优化或其他:
-
有关优化/改进:
这个作业的要求其实只要获取一种商品的信息以及实时价格监控,但是在一般情况下,我们需要的肯定不止一个商品,因此我在代码中其实获取的是我搜索到的页面信息中的所有商品(第一页的商品),然后再一一展示。
-
其他:
其实这次的作业所使用的两个工具(fiddler+pyCharm),编译的语言(Python)都是我第一次接触到的,我相信很多的同学也是第一次接触。首先很感谢一些同学的帮助,其实我编写本次作业并没有在网络上查找过多的内容,而是一些对这方面颇有理解的同学进行简单的指导,比如python中类、方法的简单运用,fiddler抓取的数据哪些是实质性的东西。这个任务也只不过是一个很简单的输出。希望之后有时间的话,我能够系统化地学习下python语言。