叶子圣-第二次作业
叶子圣-第二次作业
一、准备工作
- 安装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 文件进行树状解析,这大大减轻了我的工作负担,解放了我的双眼!
-
编程
- 对爬来的收藏夹 j son 发送请求,然后将获得的数据进行循环得到每个收藏夹 id 和 title 保存在变量中
- 对每个收藏夹抓到的 j son 再次发送请求,将得到的内容的标题和链接保存在变量中
- 最后进行输出打印
代码如下:
#请求头 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
这是我的gitee commit: