鱼C论坛

 找回密码
 立即注册
查看: 2607|回复: 6

python爬虫的一些问题

[复制链接]
发表于 2020-10-19 19:41:18 | 显示全部楼层 |阅读模式

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

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

x
代码如下
import urllib.request
import urllib.parse
import json

content=input('请输入翻译词语')

url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={}
data['i']=content
data['doctype']='json'
data['keyfrom']='fanyi.web'
data['typoResult']='true'
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1520416292076'
data['sign']='41fe7ea28425a0a4ceb88ab4c8609d13'
data['version']='2.1'

data['action']='FY_BY_CLICKBUTTION'
data['typoResult']='false'

data=urllib.parse.urlencode(data).encode('utf-8')
response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
ta = json.loads(html)
print(ta['translateResult'][0][0]['tgt'])
经过测试可用,但这是在搜索别人的代码下实现的,问题出在我自己按小甲鱼第一期python找到的form date与上面代码不同
自己找到的form date如下
data['i']:content
data['from']: 'AUTO'
data['to']: 'AUTO'
data['smartresult']: 'dict'
data['client']: 'fanyideskweb'
data['salt']: '16012838780358'
data['sign']: 'dcc11dde189f70a1e028041fee113205'
data['lts']: '1601283878035'
data['bv']: '4fa486883137f3299a6cff61cf098e44'
data['doctype']: 'json'
data['version']: '2.1'
data['keyfrom']: 'fanyi.web'
data['action']: 'FY_BY_CLICKBUTTION'
希望各位鱼油帮帮忙,表单数据具体的原理以及其包含的内容也不太清楚,希望能帮忙解释下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-21 17:49:48 | 显示全部楼层
data参数具体含义只有网站清楚,我们只能透过字面意思或javascript反向分析,或者完全模仿f12看到的流程来模拟查询,这也是爬虫正在做的。
另外,从经验来看,提交表单时可以不用都提交,有时只需要提交几个参数就能得到正确响应,比如有道翻译实际只提交一个i参数即可。
当然,不同的网站,不同API各有不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 16:57:25 | 显示全部楼层
  1. import json
  2. import time
  3. import random
  4. import hashlib
  5. import requests


  6. def youdao_fanyi(key):

  7.     baseurl = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
  8.    
  9.     # 计算时间戳13位
  10.     time_span = int(time.time()*1000)
  11.     lts = str(time_span)
  12.     # salt 为lts后添加一位随机数,凑成14位
  13.     salt =  str(time_span*10 + random.randint(0, 10))

  14.     # sign 计算方式
  15.     s = "fanyideskweb" + key + salt + "]BjuETDhU)zqSxf-=B#7m"
  16.     sign = hashlib.md5(s.encode()).hexdigest()
  17.    
  18.     # navigator.appVersion,固定,可以使用固定值
  19.     agent = "5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
  20.     bv = hashlib.md5(agent.encode()).hexdigest()

  21.     data = {
  22.         "i" :  key,
  23.         "from" : "AUTO",
  24.         "to" : "AUTO",
  25.         "smartresult" : "dict",
  26.         "client" : "fanyideskweb",
  27.         "salt" : salt,
  28.         "sign" : sign,
  29.         "lts" :  lts,
  30.         "bv" : bv,
  31.         "doctype" : "json",
  32.         "version" : "2.1",
  33.         "keyfrom" : "fanyi.web",
  34.         "action" : "FY_BY_REALTlME"
  35.     }
  36.   
  37.     headers = {
  38.         "Accept": "application/json, text/javascript, */*; q=0.01",
  39.         "Accept-Encoding" : "gzip, deflate",
  40.         "Accept-Language" : "zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7",
  41.         "Connection" : "keep-alive",
  42.         "Content-Length" : str(len(key)),
  43.         "Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
  44.         "Cookie" : "OUTFOX_SEARCH_USER_ID=1195241757@10.108.160.101; JSESSIONID=aaaewgbb34F9kdlA9wswx; OUTFOX_SEARCH_USER_ID_NCOO=1539706065.7723656; ___rl__test__cookies=1604559693998",
  45.         "Host" : "fanyi.youdao.com",
  46.         "Origin" : "http://fanyi.youdao.com",
  47.         "Referer" : "http://fanyi.youdao.com/",
  48.         "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36",
  49.         "X-Requested-With" : "XMLHttpRequest"
  50.     }


  51.     response =requests.post(url=baseurl, data=data, headers = headers)
  52.    
  53.     # json大概内容
  54.     """
  55.     {
  56.             "translateResult": [
  57.                     [{
  58.                             "tgt": "Please use",
  59.                             "src": "请使用"
  60.                     }]
  61.             ],
  62.             "errorCode": 0,
  63.             "type": "zh-CHS2en"
  64.     }
  65.     """
  66.     if response.status_code == 200:
  67.        # print(response.text)
  68.         result = response.json()
  69.     else:
  70.         result = {}

  71.     if result.get("errorCode")==0:
  72.         str_result = "翻译结果:"
  73.         data_list = result.get('translateResult')[0]
  74.         for item in data_list:
  75.             str_result += item.get('tgt')
  76.         return str_result
  77.     else:
  78.         return key

  79. if __name__ == "__main__":
  80.     key = input("翻译的内容:")
  81.     print(youdao_fanyi(key))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 16:58:32 | 显示全部楼层
  1. import json
  2. import time
  3. import random
  4. import hashlib
  5. import requests


  6. def youdao_fanyi(key):

  7.     baseurl = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
  8.    
  9.     # 计算时间戳13位
  10.     time_span = int(time.time()*1000)
  11.     lts = str(time_span)
  12.     # salt 为lts后添加一位随机数,凑成14位
  13.     salt =  str(time_span*10 + random.randint(0, 10))

  14.     # sign 计算方式
  15.     s = "fanyideskweb" + key + salt + "]BjuETDhU)zqSxf-=B#7m"
  16.     sign = hashlib.md5(s.encode()).hexdigest()
  17.    
  18.     # navigator.appVersion,固定,可以使用固定值
  19.     agent = "5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
  20.     bv = hashlib.md5(agent.encode()).hexdigest()

  21.     data = {
  22.         "i" :  key,
  23.         "from" : "AUTO",
  24.         "to" : "AUTO",
  25.         "smartresult" : "dict",
  26.         "client" : "fanyideskweb",
  27.         "salt" : salt,
  28.         "sign" : sign,
  29.         "lts" :  lts,
  30.         "bv" : bv,
  31.         "doctype" : "json",
  32.         "version" : "2.1",
  33.         "keyfrom" : "fanyi.web",
  34.         "action" : "FY_BY_REALTlME"
  35.     }
  36.   
  37.     headers = {
  38.         "Accept": "application/json, text/javascript, */*; q=0.01",
  39.         "Accept-Encoding" : "gzip, deflate",
  40.         "Accept-Language" : "zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7",
  41.         "Connection" : "keep-alive",
  42.         "Content-Length" : str(len(key)),
  43.         "Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
  44.         "Cookie" : "OUTFOX_SEARCH_USER_ID=1195241757@10.108.160.101; JSESSIONID=aaaewgbb34F9kdlA9wswx; OUTFOX_SEARCH_USER_ID_NCOO=1539706065.7723656; ___rl__test__cookies=1604559693998",
  45.         "Host" : "fanyi.youdao.com",
  46.         "Origin" : "http://fanyi.youdao.com",
  47.         "Referer" : "http://fanyi.youdao.com/",
  48.         "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36",
  49.         "X-Requested-With" : "XMLHttpRequest"
  50.     }


  51.     response =requests.post(url=baseurl, data=data, headers = headers)
  52.    
  53.     # json大概内容
  54.     """
  55.     {
  56.             "translateResult": [
  57.                     [{
  58.                             "tgt": "Please use",
  59.                             "src": "请使用"
  60.                     }]
  61.             ],
  62.             "errorCode": 0,
  63.             "type": "zh-CHS2en"
  64.     }
  65.     """
  66.     if response.status_code == 200:
  67.        # print(response.text)
  68.         result = response.json()
  69.     else:
  70.         result = {}

  71.     if result.get("errorCode")==0:
  72.         str_result = "翻译结果:"
  73.         data_list = result.get('translateResult')[0]
  74.         for item in data_list:
  75.             str_result += item.get('tgt')
  76.         return str_result
  77.     else:
  78.         return key

  79. if __name__ == "__main__":
  80.     key = input("翻译的内容:")
  81.     print(youdao_fanyi(key))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 21:58:57 | 显示全部楼层
我也有同样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-12 00:26:24 | 显示全部楼层
廖刘龙 发表于 2020-11-11 21:58
我也有同样的问题

有道翻译接口分析,可以看看https://blog.csdn.net/YungGuo/article/details/109559512
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-12 20:58:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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