百度翻译爬取出错{‘errno‘: 997, ‘errmsg‘: ‘未知错误‘, ‘query‘: ‘你好世界‘, ‘from‘: ‘zh‘, ‘to‘: ‘en‘, ‘error‘: 997}

本文探讨了使用Python爬虫从百度翻译API抓取数据的方法。重点介绍了如何解决因sign参数变化导致的反爬措施,确保爬虫稳定运行。

这是我的课程期末作业需要爬取一个网址中的数据,其中测试百度翻译的爬虫时出现了一些问题。

import json 
import requests
url = "https://fanyi.baidu.com/v2transapi"



# query_str = input("请输入要翻译的中文:")
query_string = {"from": "zh",
                "to": "en",
                "query": "你好世界",
                "transtype": "translang",
                "simple_means_flag": "3",
                "sign": "1265.321472",
                "token": "11c16a562f2de40546a9f27f22f2b17d",
                "domain": "common"
            }
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
        "Cookie": "BIDUPSID=80E13FA61FB06ABD9052A70B1274F507; PSTM=1591928152; BDUSS=5wU2JtTkVMbVlnUVc5ZTdaeVdkd1Nqa0tWLTAxSGpQWG5VUlNUTURReHpDb0JnRVFBQUFBJCQAAAAAAAAAAAEAAAAUSTesxOPDx8O7ztLLp7ChsKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHN9WGBzfVhgNk; BDUSS_BFESS=5wU2JtTkVMbVlnUVc5ZTdaeVdkd1Nqa0tWLTAxSGpQWG5VUlNUTURReHpDb0JnRVFBQUFBJCQAAAAAAAAAAAEAAAAUSTesxOPDx8O7ztLLp7ChsKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHN9WGBzfVhgNk; __yjs_duid=1_cae0585cd3a1c5e6e359a009a16146a21621944461667; BAIDUID=30E5DE4616987C67FEFC7B42425BEF85:FG=1; BAIDUID_BFESS=30E5DE4616987C67FEFC7B42425BEF85:FG=1; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; PSINO=5; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; SOUND_PREFER_SWITCH=1; SOUND_SPD_SWITCH=1; HISTORY_SWITCH=1; Hm_lvt_afd111fa62852d1f37001d1f980b6800=1624523890; BCLID=11043766726698675042; BDSFRCVID=Dk4OJexroG38EYQec-kRbcMK8_weG7bTDYLELhM_xuxFdV0VJeC6EG0Pts1-dEu-EHtdogKKKgOTHI8F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tR3aQ5rtKRTffjrnhPF3DJKvXP6-hnjy3bAOKxTl5R8VHP3P-Ucveh4Wbttf5q3RymJ42-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvyP-g3-7AqU5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIEoCvDKRrBjjrP-trf5DCShUFs0PPJB2Q-XPoO3K8WsfThbt-VMpDV-PciqpRf5mkf3fbgylRp8bnEBn7h2MKO3G3pBtQmJeTxoUJ2-KDVeh5Gqfo15-0ebPRiB-b9QgbAVpQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjLKejcB3e; BCLID_BFESS=11043766726698675042; BDSFRCVID_BFESS=Dk4OJexroG38EYQec-kRbcMK8_weG7bTDYLELhM_xuxFdV0VJeC6EG0Pts1-dEu-EHtdogKKKgOTHI8F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tR3aQ5rtKRTffjrnhPF3DJKvXP6-hnjy3bAOKxTl5R8VHP3P-Ucveh4Wbttf5q3RymJ42-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvyP-g3-7AqU5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIEoCvDKRrBjjrP-trf5DCShUFs0PPJB2Q-XPoO3K8WsfThbt-VMpDV-PciqpRf5mkf3fbgylRp8bnEBn7h2MKO3G3pBtQmJeTxoUJ2-KDVeh5Gqfo15-0ebPRiB-b9QgbAVpQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjLKejcB3e; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1624524063,1624524067,1624528433,1624528582; BDRCVFR[rlCQPVAaoab]=mk3SLVN4HKm; H_PS_PSSID=31254_26350; Hm_lpvt_afd111fa62852d1f37001d1f980b6800=1624688438; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1624695135; __yjs_st=2_ZTY3YjZjODFkMmU2ZWM3MjBiOTc1ZGMyMDljYjUxZjU2YjI4ZjdhZTM3ODlmMDVjN2NiZDU2YmE2M2U4ZGEzYThmMzhlN2JkNjU4MmJlMDQ1ZGJjOTMxODEzNmE5NjI3YWMzZDRiNzY1OTAxNGVkOWU0NzkzMDdiMThmMmM2NjJlOWZkYzI5MjJmYjk1Nzc4Njg0MGE3ZjM4ODllOWFmYjUwMTdlODNhM2I0N2M3YWZmZjNiMzkxOTI4NmNhODc2ZmZiMTJhYzc4YjcwOTc3ZDUyOTU1ZGQwM2JmNzUzNGM4YWNiODBkNTJmMGU3ODM0NzhjZjdhMWI3MmQxMTZiY183XzNmYzlmNzYw; ab_sr=1.0.1_NTY1YTVlZjI0ZWJmNTlkODQxOGNjODZlMThiYjdlYzFiNTNiOTcwYTg5OWQwMDA5ODI5YmFjYWU5YzIyNzRlYTA5NDI5MDBjN2JkZmUyMTRhZjM2MDY0MjIwMWVjOTU3NmMzZjJhY2UzZTVlZmNkMjhkZGNjMGNkZGE2MjNhOWUyYjAwMTYzM2EwN2IxNGE2OTZmYWJiYTU2M2VmMWYxZmY3MDk1ZTQzYjhmMWM0NWY5ZWI2Y2ZmYTgzMmJlMDI1"}

response = requests.post(url,data=query_string,headers = headers)

# print(response)

# print(response.content.decode())
# print(type(response.content.decode()))

html_str = response.content.decode()#json字符串

dict_ret = json.loads(html_str)#json字符串转化为python类型
# print(html_str)
ret = dict_ret["trans_result"]['data'][0]['dst']

print("翻译结果是:",ret)

在在18年时还不会出现 {‘errno’: 997, ‘errmsg’: ‘未知错误’, '‘query’: ‘你好世界’, ‘from’: ‘zh’, ‘to’: ‘en’, ‘error’: 997}}
但后面百度反爬多出现了一个叫sign叶也就是下图中的sign在这里插入图片描述
现在的query:(也就是你输入的内容)不同,他的sign也就会发生变化,所以就出现了很脑溢血的事情,你要是想这段代码不出异常错误码997&998,你必须每次把内容先翻译一遍然后再去修改sign值***吐血***!!!!

### 解决 'Cannot read properties of null (reading 'canvasToTempFilePath')' 错误 这种错误通常是因为尝试在一个 `null` 对象上调用 `canvasToTempFilePath` 方法,一般是由于没有正确获取到 canvas 上下文或者 canvas 元素不存在。以下是一些解决办法: #### 确保 canvas 元素存在 在调用 `canvasToTempFilePath` 之前,要保证页面中存在对应的 canvas 元素,并且使用正确的 `canvas-id`。 ```html <canvas canvas-id="myCanvas"></canvas> ``` #### 正确获取 canvas 上下文 在 JavaScript 代码里,需使用 `wx.createCanvasContext` 正确获取 canvas 上下文。 ```javascript const ctx = wx.createCanvasContext('myCanvas'); ``` #### 等待 canvas 初始化完成 有时候 canvas 可能还未完全初始化,就调用了 `canvasToTempFilePath` 方法,此时可使用 `requestAnimationFrame` 确保在 canvas 初始化完成之后再调用。 ```javascript wx.createSelectorQuery().select('#myCanvas') .fields({ node: true, size: true }) .exec((res) => { const canvas = res[0].node; const ctx = canvas.getContext('2d'); // 等待一帧确保 canvas 初始化完成 requestAnimationFrame(() => { wx.canvasToTempFilePath({ canvasId: 'myCanvas', success(res) { console.log(res.tempFilePath); }, fail(err) { console.error(err); } }); }); }); ``` ### 解决 'saveImageToPhotosAlbum:fail auth deny' 错误错误表示用户拒绝了保存图片到相册的授权,可按以下方法解决: #### 检查权限并请求授权 在调用 `saveImageToPhotosAlbum` 之前,先检查是否有保存相册的权限,若没有则请求授权。 ```javascript wx.getSetting({ success(res) { if (!res.authSetting['scope.writePhotosAlbum']) { wx.authorize({ scope: 'scope.writePhotosAlbum', success() { // 授权成功,保存图片到相册 wx.saveImageToPhotosAlbum({ filePath: 'your_image_path', success() { console.log('保存成功'); }, fail(err) { console.error(err); } }); }, fail() { // 授权失败,引导用户打开设置页面授权 wx.showModal({ title: '提示', content: '需要您授权保存图片到相册', showCancel: false, success() { wx.openSetting({ success(res) { if (res.authSetting['scope.writePhotosAlbum']) { // 用户打开设置页面授权成功,保存图片到相册 wx.saveImageToPhotosAlbum({ filePath: 'your_image_path', success() { console.log('保存成功'); }, fail(err) { console.error(err); } }); } } }); } }); } }); } else { // 已有权限,直接保存图片到相册 wx.saveImageToPhotosAlbum({ filePath: 'your_image_path', success() { console.log('保存成功'); }, fail(err) { console.error(err); } }); } } }); ```
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值