通过有道翻译实现翻译
在检测里看见 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)
就能简单显示结果了。
- .将数据转换成json字符串。(dump和dumps的用法):
data = { 'name' : '张三', 'age' : 25}
a=json.dumps(data) >>>'{"name": "\\u5f20\\u4e09", "age": 25}'
- 将json字符串或者文件中的json字符串转换成Python的代码数据。(load和loads的用法)
>>> json.loads(a)
{'name': '张三', 'age': 25}
python 原始类型向 json 类型的转化对照表:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
- encode() 函数用于将 Python 对象编码成 JSON 字符串。
- 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()
奇怪的知识又双叒叕增加了。。。。。。。。