首页 » PHP教程 » PHP获取RequestPayload技巧_小伙给同事爬取数据竟获取不到竟要运用这种请求办法才能获取

PHP获取RequestPayload技巧_小伙给同事爬取数据竟获取不到竟要运用这种请求办法才能获取

duote123 2024-11-24 0

扫一扫用手机浏览

文章目录 [+]

一、默认的表单办法要求 Form Data

post要求的Content-Type为application/x-www-form-urlencoded(默认的),参数是在要求题中,即上面要求中的Form Data。

PHP获取RequestPayload技巧_小伙给同事爬取数据竟获取不到竟要运用这种请求办法才能获取

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

PHP获取RequestPayload技巧_小伙给同事爬取数据竟获取不到竟要运用这种请求办法才能获取
(图片来自网络侵删)

代码格式:

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文件进行保存。

终极显示数据内容

在这个暴躁的时期;竟然还有人能坚持篇篇原创;如果本文对你学习有所帮助-可以点赞+ 关注!
将持续更新更多新的文章。
支持原创。
感谢!

标签:

相关文章

今日头条算法岗位面试核心方法与必备知识

大数据、人工智能等技术在各行各业得到了广泛应用。今日头条作为中国领先的资讯平台,其算法技术更是备受关注。今日头条算法岗位面试成为了...

PHP教程 2025-01-31 阅读1 评论0

今日头条算法推送如何打造个化阅读体验

在互联网时代,信息爆炸成为常态,用户获取信息的渠道越来越多,而时间却愈发有限。如何让用户在海量信息中快速找到感兴趣的内容,成为了各...

PHP教程 2025-01-31 阅读1 评论0