Python随记(29)通过有道实现翻译 json库的使用 保存爬取的图片

通过有道翻译实现翻译

在检测里看见 i 就是我们输入要翻译的,通过这些 data就能实现翻译的功能了
在这里插入图片描述

import requests
import json
import time
while 1:
    content = input("请输入:")
    if content == "":
        break
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0",
        'i': content,     
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': '15858824830990',
        'sign': 'b44c32dfd09c7d3387ba4f00b115e82c',
        'ts': '1585882483099',
        'bv': 'cc652a2ad669c22da983a705e3bca726',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME'
        }

    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=null'  # 注意这个url是抓包里的。
    response = requests.get(url, params=headers)   # 这里的参数选择params 这个将数据发到服务器然后服务器会进行筛选,再将数据返回
    html = response.content.decode()
    target = json.loads(html)
    print("翻译结果:")
    print(target['translateResult'][0][0]['tgt'])
	time.sleep(5)  # 睡五秒,防止请求过于频繁

json库的使用

在上例中,如果不使用json,print(html) >>> {"type":"EN2ZH_CN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"nihao","tgt":"你好"}]]}

结果倒是有了,我们打印出来的是一个字符串,有人就说,我们可以通过字符串查找的形式把 tgt 找出来,但这样太被动了。

其实,这是一个 json 结构,json 是一种轻量级的数据交换结构,说白了,这里就是用字符串的形式把 Python 的输出结果给封装起来,这个字符串里面包含的其实是一个字典,“translateResult” 里面的值是一个列表的列表的字典。所以通过json.loads(html)就能简单显示结果了。

  1. .将数据转换成json字符串。(dump和dumps的用法):
data = { 'name' : '张三', 'age' : 25}
a=json.dumps(data)  >>>'{"name": "\\u5f20\\u4e09", "age": 25}'
  1. 将json字符串或者文件中的json字符串转换成Python的代码数据。(load和loads的用法)
>>> json.loads(a)
{'name': '张三', 'age': 25}

python 原始类型向 json 类型的转化对照表:

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。

  1. encode() 函数用于将 Python 对象编码成 JSON 字符串。
  2. demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print(json)  >>>>[{"a":1,"b":2,"c":3,"d":4,"e":5}] 

保存图片

爬虫嘛,,作为一个男生肯定过不了爬妹子 的一关
今天学习的时候,发现找路径已经不难了,难的是文件的保存。。。痛哭,,所以记录下来熟能生巧嘛

import requests
from lxml import etree
import os
headers = {'User-Agent': '。。。。。'}   # 自己去复制
os.chdir(r'。。。。。') # 保存的位置

def get_text(url):
    resp = requests.get(url, headers=headers)
    text = resp.content
    return text
def get_data(url):
    text=get_text(url)
    html = etree.HTML(text)
    data = []
    for each in html.xpath('//ul/img/@src'):
        data.append(each)
    return data
def save_mm(url,f):
    msg = get_text(url)   # 访问图片的网址,将其中的二进制数据写进文件中。(学到了)
    f.write(msg)

def main():
    base_url = 'https://www.nvshens.net/g/31821/{}.html'  # 写真网站(狗头),,
    for i in range(14):
        url = base_url.format(i)
        data = get_data(url)
        for each in data:              # each 就是从网页上找到的图片链接
            name = each.split('/')[3:]   # 图片名的设置是有讲究的,不能有斜杠之类的,
            with open('-'.join(name),'wb') as f:  # 为了防止重名而覆盖原图,将文件名设置的独特一点。。。以二进制形式打开
                save_mm(each,f)

if __name__ == '__main__':
    main()

奇怪的知识又双叒叕增加了。。。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值