【Python爬虫初学者】爬取百度翻译界面全代码,解决提取不了具体参数的问题

解决问题:
2万字带你走进python爬虫requests库,史上最全!!
3.3 使用 POST 请求抓取网页,实现不了的原因

须知:
哪些地方我们会用到 POST 请求?

  • 登录注册(在 web 工程师看来 POST 比 GET 更安全, url 地址中不会暴露用户的账号密码等信息)
  • 需要传输大文本内容的时候( POST 请求对数据长度没有要求)
    所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送 post 请求其实发送 POST 请求与 GET 方式很相似,只是参数的传递我们需要定义在 data 中即可:
     POST 参数说明:
    post(url, data=None, json=None, **kwargs):
    ❖ URL: 待请求的网址
    ❖ data : ( 可选 ) 字典,元组列表,字节或类似文件的对象,以在 Request 的正文中发送
    ❖ json: ( 可选 )JSON 数据,发送到 Request 类的主体中。
    ❖ **kwargs: 可变长关键字参数

补充:

requests 模块发送请求有 data 、 json 、 params 三种携带参数的方法
params 在 get 请求中使用, data 、 json 在 post 请求中使用。
data 可以接收的参数为:字典,字符串,字节,文件对象,
❖ 使用 json 参数,不管报文是 str 类型,还是 dict 类型,如果不指定 headers 中 content-type 的
类型,默认是: application/json 。
❖ 使用 data 参数,报文是 dict 类型,如果不指定 headers 中 content-type 的类型,默认 application/x
www-form-urlencoded ,相当于普通 form 表单提交的形式,会将表单内的数据转换成键值对,此时数据可以从 request.POST 里面获取,而 request.body 的内容则为 a=1&b=2 的这种键值对形式。
❖ 使用 data 参数,报文是 str 类型,如果不指定 headers 中 content-type 的类型,默认 applica
tion/json 。
用 data 参数提交数据时, request.body 的内容则为 a=1&b=2 的这种形式,
用 json 参数提交数据时, request.body 的内容则为 ’“a”: 1, “b”: 2’ 的这种形式

直接上全部的爬虫代码:
有参考这个博主,不知道user-agent和Cookie等获取方式的请点击
但是他的-获取json文件内容,我使用不了

import requests
url ="https://fanyi.baidu.com/v2transapi"
# 准备翻译的数据
# translate="How can Apple iCloud, which has been released for 13 years, store billions of databases without lagging?"
# How can Apple iCloud, which has been released for 13 years, store billions of databases without lagging?
kw = input("请输入要翻译的词语:")
# ps = {"kw": kw}

ps = {
    "from": "en",
    "to": "zh",
    "query": kw,
    "transtype": "enter",
    "simple_means_flag": "3",
    "sign": "744869.1031828",
    "token": "写你自己的token",
    "domain": "common",
    "ts": "1705988866641"
}

# 准备伪造请求
headers = {
    # User-Agent:首字母大写,表示请求的身份信息;一般直接使用浏览器的身份信息,伪造爬虫请求
    # 让浏览器认为这个请求是由浏览器发起的[隐藏爬虫的信息]
    "user-agent": "用你自己的user-agent",
    "Cookie": '写你自己的cookie'
}
# 发送POST请求,附带要翻译的表单数据--以字典的方式进行传递
response = requests.post(url, data=ps, headers=headers)
# 打印返回的数据
# print(response.content)
print(response)
# utf-8解码出来中文是正则表达式
print(response.content.decode('utf-8'))
# 中文转码
print(response.content.decode("unicode_escape"))

import jsonpath
json=response.json()
if __name__ == '__main__':
    # 若传入的数据为str类型需要将它转成dict类型
    # result = json.loads(jsondata)
    dstlist=[]
    dstlist=jsonpath.jsonpath(json, '$..dst')
    print(dstlist)

爬取结果截图:
在这里插入图片描述

  • 32
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值