实训第四天

本日实训记录(记录今日实训的具体学习过程,包含知识大纲、截图、核心代码等)
1.今日知识大纲
(1)京东评论初步尝试
(2)静态网站和动态网站
(3)评论请求寻求分析
(4)json格式
(5)请求天气接口
(6)请求京东评论接口

补充:1.静态网站:几乎所有的后端语言的web框架 Java ssh php flask
服务端web程序接收到请求后 从数据库取数据 把数据拼凑到事先准备的HTML模板骨架中 形成一个完整的网页html
最终响应 浏览器解析 用户看到效果
这种技术非常流行 广义上来说是动态网站 实际是响应前html已经确定好了 狭义上是静态网站
缺点:如果页面数据已经变更:例如有人评论了你的消息 但不刷新自己是不知道的
需要手动频繁刷新页面 费时又费力
2.js动态页面:
第一次请求从后台收到html源代码 HTML源代码只有网页菜单导航等公共部分和js
浏览器拿到第一次响应 解析js js中发起后续异步同台请求,从后台拿到纯数据 通过js把数据渲染某一处div里面
最终用户看到完整网页
优点:传输更快 首屏加载更快 局部刷新体验更好 缺点:写js增加开发成本
场景:评论 微博 朋友圈提示 注册表单在提交前提示用户名已注册
技术栈:xhr jquery.ajax nodejs vue aios

分别:
第一次url document请求得到的源代码 跟网页最终(开发者工具elements)比对
如果一致 静态网站 不一致 js动态网站
整个网页刷新 局部刷新
xpath是否能取到目标数据 如果取不到 则数据在后续的js请求中

json格式
为什么用json xml 而不是 list dict [] {}
因为不同计算机互相交流数据 Java PHP python C,C++ Go
键值对,python里{‘name’:‘小明’} 浏览器url里name = 小明& ,Java map js 对象{}
类似的结构 因为解释器底层实现不一样 表示同样数据的二进制不一样 {‘name’:‘小明’}->二进制.编码
每一天计算机上的编程语言和服务不一样 需求’中间格式’ python 内置对象->中间格式->服务器自己语言格式Java
所以 有统一格式 XML,json [字符串]

2.核心代码
(5)请求天气接口
时下流行,前端后端分离开开发
后端负责接受请求 响应纯数据 叫 api 接口 前端js负责发请求
接口(别人提供数据的后台程序) 分为合法和非法
合法: 阿里云 各种AI接口 淘宝商品 GitHub
非法: 京东接口

import json
import requests

url = ‘http://t.weather.itboy.net/api/weather/city/101030100’

resp = requests.get(url)
status_code = resp.status_code
weather_json_str = resp.text
print(weather_json_str)

weather_obj = json.loads(weather_json_str)
print(type(weather_obj), weather_obj)
json结构复杂 如何观察取数据
把返回值从浏览器或控制复制到pycharm的 临时 .json文件中
pycharm/code/reformat 格式化 json文件 照着json文件层数取数
weather_data = weather_obj[‘data’]
print(weather_data)
day_weather_list = weather_data[‘forecast’]
print(day_weather_list)
for day in day_weather_list:
print(day)
date = day[‘date’]
high = day[‘high’]
low = day[‘low’]
type = day[‘type’]
print(f’今天{date}号,天气{type},高温{high},低温{low}’)
(6)请求京东评论接口

import json
import requests

base_url = ‘https://club.jd.com/comment/productPageComments.action’

本次请求头只用伪造user-agent即可 但前段时间测试需要cookie字段
headers = {
# ‘Cookie’: ‘__jdu=16096534364451068756302’,
# ‘Referer’: ‘https://item.jd.com’,
‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36’,
}

tips:开发者工具network请求头下面的query params复制下来再调整 使用编辑器列编辑模式 alt+shift+鼠标拖动
params = {
#‘callback’: ‘fetchJSON_comment98’,
‘productId’: 100009077475, # 商品id
‘score’: 0,
‘sortType’: 5,
‘page’: 1, # 第n页
‘pageSize’: 10,
‘isShadowSku’: 0,
‘rid’: 0,
‘fold’: 1
}

for i in range(1, 20):
params[‘page’] = i
resp = requests.get(base_url, headers=headers, params=params)
status_code = resp.status_code
comments_json = resp.text
print(comments_json)
京东评论接口返回jsonp格式 ,涉及跨域问题 需要将jsonp转json
方法 1:python字符串方法删除固定长度无用字符串;2(推荐):上网找从jsonp过滤json正则;3:本例中发现修改参数可以直接返回json

comments_obj = json.loads(comments_json)
print(comments_obj)
comments = comments_obj[‘comments’]
for c in comments:
# print©
cid = c[‘id’]
content = c[‘content’]
creation_time = c[‘creationTime’]
images = c[‘images’]
product_color = c[‘productColor’]
product_color = c[‘productSize’]
print(’-’*100)
print(cid, content)
3.效果截图

上一篇:零基础入门数据挖掘实践(学术前沿趋势分析)之三


下一篇:数据挖掘实战-前沿分析-Task03