上次爬有道爬自闭了,这次来爬金山翻译。
经过耐心的搜索,我们找到了翻译返回给我们的json文件(这应该算简单的动态网页的爬取了吧)

我们看到上面这个图中的json文件中有我们需要的信息。

下面是关于这个json文件的详细信息

所以我们需要发送请求的链接就是图中的request url,因为这个url会返回给我们所需要的信息。
下面的from data:f(from), t(to), w(word)我就不多做解释了,auto是选项中自动检测的意思。

requests有一个参数data
**通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:
**

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
    ...
    "form": {
    "key2": "value2",
    "key1": "value1"
    },
    ...
}

(来自官方文档,大概理解下意思就ok了)

import requests

header = {
    "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36",
    "Cookie":"BAIDU_SSP_lcr=https://cn.bing.com/; UM_distinctid=1692f3478f9447-0f5653ed5d37ea-3e750b5c-1fa400-1692f3478fa48c; CNZZDATA1256573702=1311884159-1551270802-null%7C1551270802; __gads=ID=da06af14a0ea5b63:T=1551275161:S=ALNI_MYu7Os1YztlvFHKcITTLxxXmMThVA; iciba_u_rand=e53f3ece0d5d389b1150ef2791e6c930%40112.224.1.70; iciba_u_rand_t=1551275184"
    }

word = input("Please enter the word or words you want to query:\n")
#输入‘#’结束程序
while word != '#':
    
    #这个url就是上面图中的Requests URL
    url = "http://fy.iciba.com/ajax.php?a=fy"
    
    data = {
        "f" : "auto",
        "t" : "auto",
        "w" : word
        }
    req = requests.get(url, data = data, headers = header)

    #讲返回的json格式化,得到的response是一个字典

    response = req.json()
    
    #下面这些是一些细节实现,就不多做解释了
    print ("Output:")
    if (response["status"] == 1):
        print (response["content"]["out"])
    elif (response["status"] == 0):
        result = response["content"]["word_mean"]
    for var in result:
        print (var.replace(';', '\n'))
    else:
        print ("bug出现了,请联系作者!")

    word = input("\nInput:\n")