当前位置:首页 > 技术分析 > 正文内容

小伙给同事爬取数据竟获取不到,竟要使用这种请求方式才能获取?

ruisui883个月前 (01-20)技术分析22

Http请求中Form Data 和 Request Payload两种参数的区别 ?

Ajax Post请求中常用的两种的形式:form data 和 request payload

一、默认的表单方式请求 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 requests
import 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"}}}'

# 发起网络请求,获取到返回的html
result = 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文件进行保存。

最终显示数据内容



在这个浮躁的时代;竟然还有人能坚持篇篇原创;

如果本文对你学习有所帮助-可以点赞+ 关注!将持续更新更多新的文章。

支持原创。感谢!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/391.html

分享给朋友:

“小伙给同事爬取数据竟获取不到,竟要使用这种请求方式才能获取?” 的相关文章

Lindroid开源应用:在安卓手机 / 平板上安装 Linux发行版

IT之家 6 月 19 日消息,Erfan Abdi 本月发布了 Lindroid 开源应用程序,让用户可以在安卓手机上安装 GNU / Linux 发行版,在完全支持手机硬件的情况下可以运行 Linux 应用程序。Lindroid 开源应用程序就是将 Linux 放入容器中,使用 Halium 等...

抖音 Android 性能优化系列:启动优化实践

启动性能是 APP 使用体验的门面,启动过程耗时较长很可能使用户削减使用 APP 的兴趣,抖音通过对启动性能做劣化实验也验证了其对于业务指标有显著影响。抖音有数亿的日活,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向...

我的VIM配置

写一篇关于VIM配置的文章,记录下自己的VIM配置,力求简洁实用。VIM的配置保存在文件~/.vimrc中(Windows下是C:\Users\yourname \_vimrc)。VIM除了自身可配置项外,还可插件扩展。VIM的插件一般用vundle或vim-plug来管理,但我力求简单,不打算装太...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

雅马哈TMAX 560 TECH MAX 外媒深度测评

应雅马哈(Yamaha)的邀请,在葡萄牙埃斯托里尔对全新的Yamaha TMAX 560 Tech Max踏板车进行了测试,在这里TMAX 560 Tech Max售价为11649英镑。雅马哈TMAX长期以来一直站在踏板车的顶端,就声誉和知名度而言,它是当之无愧的大踏板界NO.1。2020 TMAX...

三维家-系统快捷键使用

快键件使用:通过简单的键盘+鼠标操作,快速完成搭配。1.基础快捷键1) Ctrl+V:复制选中对象第一步:鼠标左击物体,按下Ctrl+V 即可复制选中对象。2) Ctrl+G:组合多选对象第一步:按住Ctrl键多选对象--按住Ctrl+G--确定。3) Ctrl+B:解组选中对象第一步:左击选中对象...