一、默认的表单办法要求 Form Data
post要求的Content-Type为application/x-www-form-urlencoded(默认的),参数是在要求题中,即上面要求中的Form Data。
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

代码格式:
data = { 'i': '\u903B\u8F91\n', 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': '15752746021826', 'sign': 'c62688ce2eab6fd7a95cac50c3e88752', 'ts': '1575274602182', 'bv': '5bc00aa7005fda30bbc3c3735a53d97d', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME'}复制代码
二、经浏览器解析后的表单要求 Request Payload
PS: 要求的Content-Type是application/json;charset=UTF-8,而要求表单的参数在Request Payload中。
Content-Type: application/json (这里用的是json格式)
代码格式:
payload = '{"operationName":"","query":"","variables":{"ownerId":"5c3f3c415188252b7d0ea40c","size":20,"after":""},"extensions":{"query":{"id":"b158d18c7ce74f0d6d85e73f21e17df6"}}}'复制代码
二者之间的差异 ?
post要求,如果表单参数是在要求体中,也因此key1=value1&key2=value2的形式在要求体中。
通过chrome的开拓者工具可以看到,比如:
fanyi.youdao.com/translate_o…
1、如果一个要求的Content-Type设置为
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
那么这个Post要求会被认为是Http Post表单要求,要求主体也将以一个标准的键值对和&的str形式涌现。这种办法是HTML表单默认的设置,对现如今的网络要求布局是很常见的。
2、Request payload形式的POST要求,网站为了方便阅读,利用了Json这样的数据格式,要求的办法为
Content-Type: application/json 或者指定charset=UTF-8。
- 实战利用requests模块post payload要求在抓取个人数据的时候创造get形式获取不到数据,通过剖析网站构造创造须要Post要求的json格式数据;进而创造其利用的Post格式并不是Form Data 而是Request Payload
第一步:先要求拿到数据再说import requestsimport json# 首页地址url = "https://web-api.juejin.im/query"# 伪装成浏览器headers = { 'X-Legacy-Device-Id': '1574318487465', 'Origin': 'https://juejin.im', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36', 'X-Legacy-Token': 'eyJhY2Nlc3NfdG9rZW4iOiJBNVNuRUNPb1Jad0doWm1wIiwicmVmcmVzaF90b2tlbiI6IkpuVkFoZFozdjNFdDZMOFMiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ==', 'Content-Type': 'application/json', 'Referer': 'https://juejin.im/user/3650034335487975', 'X-Legacy-Uid': '5dd631975188254e310b4cbb',}payload = '{"operationName":"","query":"","variables":{"ownerId":"5c3f3c415188252b7d0ea40c","size":20,"after":""},"extensions":{"query":{"id":"b158d18c7ce74f0d6d85e73f21e17df6"}}}'# 发起网络要求,获取到返回的htmlresult = requests.post(url=url, headers=headers, data=payload).content.decode('utf-8')print(result)复制代码
这时候已经可以拿到payload表单形式的json数据了,由于考虑到是json格式的数据,未便利我们进行数据处理!
接下来咱们先转换一下格式!
这里转换成字典格式。
result=json.loads(result)result_list=result['data']['ownActivityFeed']['items']['edges']print(result_list)复制代码
这个时候已经成功的将数据格式进行转换,之后并通过一贯获取键值对的形式拿到网站所包含的数据;数据类型的格式为列表, 再次深入获取
for item in result_list: # # 用户名 node_list=item['node'] user_targets_content=node_list['targets'] for item_name_list in user_targets_content: try: user=item_name_list['user'] user_name=user['username'] user_content=item_name_list['content'] except: continue print('' 30, '\n', user_name, user_content, '\n', '' 30) with open('lg_Tony.txt','a') as file: file.write(user_name+'\t\t'+user_content+'\n\n') 复制代码
考虑到只是获取大略的界面内容,以是这里只用了txt文件进行保存。
终极显示数据内容在这个暴躁的时期;竟然还有人能坚持篇篇原创;如果本文对你学习有所帮助-可以点赞+ 关注!
将持续更新更多新的文章。支持原创。感谢!