鱼C论坛

 找回密码
 立即注册
查看: 2421|回复: 8

[已解决]请问这段爬虫代码在哪里有问题

[复制链接]
发表于 2022-8-3 16:42:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request
import urllib.parse
import json

content = input("请输入翻译的内容:")

url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

head = {}
head['Referer'] = 'http://fanyi.youdao.com'
head['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36X-Requested-With: XMLHttpRequest"

data = {}
data['type'] = 'AUTO'
data['i'] = content
data['doctype'] = 'json'
data['xmlVersion'] = '1.6'
data['keyfrom'] = 'fanyi.web'
data['ue'] = 'UTF-8'
data['typoResult'] = 'true'
data = urllib.parse.urlencode(data).encode('utf-8')

req = urllib.request.Request(url, data, head)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
target = json.loads(html)
print(html)
#print("翻译结果:%s" % (target['translateResult'][0][0]['tgt']))

按照小甲鱼书上给出的代码敲的,设置了headers参数,但是还被拦截了,请问原因是什么
最佳答案
2022-8-3 19:05:47
tommyyu 发表于 2022-8-3 18:50
好像没啥用啊……

网站改了,data要多点东西
import urllib.request
import urllib.parse
import json

content = input("请输入翻译的内容:")

url = "https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

head = {}
head['Referer'] = 'http://fanyi.youdao.com'
head['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36X-Requested-With: XMLHttpRequest"

data = {}
data["i"] = content
data["from"] = "AUTO"
data["to"] = "AUTO"
data["smartresult"] = "dict"
data["client"] = "fanyideskweb"
data["salt"] = "16595244179934"
data["sign"] = "762040024cd23ba625a1ab1ddae94a20"
data["lts"] = "1659524417993"
data["bv"] = "a16a6033635b516a9006542112cdda8f"
data["doctype"] = "json"
data["version"] = "2.1"
data["keyfrom"] = "fanyi.web"
data["action"] = "FY_BY_REALTlME"
data = urllib.parse.urlencode(data).encode('utf-8')

req = urllib.request.Request(url, data, head)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
target = json.loads(html)
#print(html)
print("翻译结果:%s" % (target['translateResult'][0][0]['tgt']))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-3 16:46:44 From FishC Mobile | 显示全部楼层
有道的代码坛子里实在是太多了,自己先搜搜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 18:11:14 | 显示全部楼层
网站改版了,现在有道翻译有反爬措施,你的爬虫被拦截了,你可以把url中的translate_o改为translate,这样爬虫就可以正常运行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 18:50:59 | 显示全部楼层
临时号 发表于 2022-8-3 18:11
网站改版了,现在有道翻译有反爬措施,你的爬虫被拦截了,你可以把url中的translate_o改为translate,这样爬虫 ...

好像没啥用啊……
屏幕截图 2022-08-03 185029.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 19:05:47 | 显示全部楼层    本楼为最佳答案   
tommyyu 发表于 2022-8-3 18:50
好像没啥用啊……

网站改了,data要多点东西
import urllib.request
import urllib.parse
import json

content = input("请输入翻译的内容:")

url = "https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

head = {}
head['Referer'] = 'http://fanyi.youdao.com'
head['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36X-Requested-With: XMLHttpRequest"

data = {}
data["i"] = content
data["from"] = "AUTO"
data["to"] = "AUTO"
data["smartresult"] = "dict"
data["client"] = "fanyideskweb"
data["salt"] = "16595244179934"
data["sign"] = "762040024cd23ba625a1ab1ddae94a20"
data["lts"] = "1659524417993"
data["bv"] = "a16a6033635b516a9006542112cdda8f"
data["doctype"] = "json"
data["version"] = "2.1"
data["keyfrom"] = "fanyi.web"
data["action"] = "FY_BY_REALTlME"
data = urllib.parse.urlencode(data).encode('utf-8')

req = urllib.request.Request(url, data, head)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
target = json.loads(html)
#print(html)
print("翻译结果:%s" % (target['translateResult'][0][0]['tgt']))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 19:13:54 | 显示全部楼层
临时号 发表于 2022-8-3 19:05
网站改了,data要多点东西

是这里的都要写么
屏幕截图 2022-08-03 185029.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 19:14:18 | 显示全部楼层
tommyyu 发表于 2022-8-3 19:13
是这里的都要写么

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 19:15:56 | 显示全部楼层
tommyyu 发表于 2022-8-3 19:13
是这里的都要写么

如果你对有道的反爬加密算法感兴趣的话可以看看我之前的有道爬虫代码
import urllib.request
import urllib.parse
import hashlib
import random
import time
import json

#init
url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36',
    'Referer': 'https://fanyi.youdao.com/',
    'Cookie': 'OUTFOX_SEARCH_USER_ID=1907954952@182.203.147.49; OUTFOX_SEARCH_USER_ID_NCOO=2032702153.1070416; fanyi-ad-id=306808; fanyi-ad-closed=1; ___rl__test__cookies=1654931146702'
}


content = input("请输入翻译的内容:")


#加密
lts = str(int(time.time()*1000))
salt = lts + str(random.randint(0,10))
sign_str = 'fanyideskweb' + content + salt + 'Ygy_4c=r#e#4EX^NUGUc5'
m = hashlib.md5(sign_str.encode())
sign = m.hexdigest()


#配置data
data = {
    "i":content,
    "from":"AUTO",
    "to":"AUTO",
    "smartresult":"dict",
    "client":"fanyideskweb",
    "salt":salt,
    "sign":sign,
    "lts":lts,
    "bv":"a16a6033635b516a9006542112cdda8f",
    "doctype":"json",
    "version":"2.1",
    "keyfrom":"fanyi.web",
    "action":"FY_BY_CLICKBUTTION"
}

#爬虫
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url,data,headers)
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
target = json.loads(html)
try:
    resalut = target["translateResult"][0][0]["tgt"]
    print("翻译结果:",resalut)
except:
    print("翻译失败")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 19:16:33 | 显示全部楼层
临时号 发表于 2022-8-3 19:15
如果你对有道的反爬加密算法感兴趣的话可以看看我之前的有道爬虫代码

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表