从零开始的爬虫生活
标题为什么要这么写呢,因为我发现啊,有很多跟着一起学习的小伙伴,对于基础并不是掌握的很牢固,或者说很充实,所以小泽准备讲的慢一点,在讲爬虫的同时,把基础也给好好地讲一讲!
对了,400赞更新下一期哦!!!400赞400赞,大家一起努力鸭
(`・ω・´)
梦回s4
今天,就让我们一起重新完善一下,昔日我们写下的,翻译器!
这里跟大家说一个需要注意的点,如果我们要在原本可以运行的代码上做出修改或者添加功能,最好最好最好是重新建立一个py文件,然后粘贴复制,这是一个好习惯,我有,希望大家也有( ̄▽ ̄)~*!
这里小泽呢,就先新建一个py文件:
然后找到我们当初写的代码,如果没找到的话,没关系,这里给你直接拷贝过来:
# 引用requests模块和json模块,为了解码
import requests
import json
# 指定我们刚才辛辛苦苦找到的url
url = 'http://fy.iciba.com/ajax.php?a=fy'
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
word = input('请输入要翻译的英语:')
date = {
'f': 'zh',
't': 'en',
'w': word
}
# .content是转成二进制的意思 .decode()是指定编译格式,默认编码为字符串编码
response = requests.post(url=url,data=date,headers=header).content.decode()
# 用json模块的loads实现把爬下来的数据转换成我们能看懂的数据
# 这里大家可以打印一下response看一看数据就知道了~要多实践哦
a = json.loads(response)['content']
b = a['word_mean']
print('---------------------------------------------')
for i in b:
print(i)
print('---------------------------------------------')
print('翻译完成!')
今天,我们就要把它给完善喽!
那么首先,我们要先有一个思维流程对吧,做什么事都要先想一想大致的流程,这里再教大家一个比较实用的技巧:
新建一个file文件,这个文件有什么好处呢?
总之就是…格调瞬间就高了起来(`・ω・´),比如:
是不是要比写一堆注释来的好看,而且思路也会更明确!
明确思路
既然说了半天思路要明确,那么大家都明确思路了吗?
很显然,没有!
好吧~╮(╯﹏╰)╭
这里只能小泽带着大家一起捋一捋思路了:
首先我们上次完成的是一个翻译功能,但是一个翻译器肯定不是光有翻译功能对吧,就像我们上厕所,不光要有排尿系统,还要有那个东西对吧,还要有洞洞,不然的话你也出不来,所以有的时候啊,不能光看内在,也要适当的看一看外在!!!o(* ̄3 ̄)o
那我们就试着把上一次写的翻译功能真正的变成一个 动态的功能吧 动态的功能吧 动态的功能吧 !
开始行动
怎么写功能呢?def啊,怎么写def呢?def 函数名():啊,怎么写def 函数名():呢?……
# def 方法名():
def fun():
# pass意为跳过,就像你遇到不会做的题跳过一样
# 程序见到pass就去找下一个命令了
pass
然后我们再把第4天的翻译功能写到功能里,就起个比较洋气的名字吧:
# 引用requests模块和json模块,为了解码
import requests
import json
# def 函数名():
def fanyi():
# 指定我们刚才辛辛苦苦找到的url
url = 'http://fy.iciba.com/ajax.php?a=fy'
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
word = input('请输入要翻译的英语:')
date = {
'f': 'zh',
't': 'en',
'w': word
}
# .content是转成二进制的意思 .decode()是指定编译格式,默认编码为字符串编码
response = requests.post(url=url,data=date,headers=header).content.decode()
# 用json模块的loads实现把爬下来的数据转换成我们能看懂的数据
# 这里大家可以打印一下response看一看数据就知道了~要多实践哦
a = json.loads(response)['content']
b = a['word_mean']
print('---------------------------------------------')
for i in b:
print(i)
print('---------------------------------------------')
print('翻译完成!')
不难看出来,其实就是开头写了个def fanyi(): 然后把下面的所有内容都往右缩进了一个表格,也许你要问什么是表格了,呐呐呐,直接教你好了,选中下面所有内容,然后按一下TAB,就是Q旁边的那个按键,哗的一下,就缩过去了(<ゝω・)☆
但是,总所周知,一个好的方法绝对不是死的,我们需要添加一些参数,观察一下,哪些数据是可以变成动态的!
就比如有很多小伙伴问过的,怎么用中文翻译英文,或者一些其他语言,两种语言的选择,加到参数里!!!
这样子就实现了我们动态改变翻译语种的目标!
为什么这么说呢,比如说啊,我们调用一下函数:
可以看到,我们选择的翻译语种是英译汉,en代表的英语,zh代表的汉语,但是大家还记得auto吗?
就是自动翻译的时候两个值都会是auto:
那么我们可不可以两个都填auto呢?
当然不可以啦!!!
你要这样想,服务器能识别你要翻译的句子,但是它不能猜到你想要翻译成什么鸭,对吧!
所以auto只能存在一个,那么我们就把en换成auto试试:
试一试,比如我们输入一句日语!
いいね
可以看到这里还是请输入要翻译的英语,不太合适,让我们改一下吧!
然后运行,输入刚才那句日语いいね,揍你:
好家伙,直接给我们报错了,很快啊!
意思就是没有这个索引值喽,那我们把字典全部打印出来看一看,到底是什么东西!
注释掉打印出来的那些东西,只看a,a就是我们爬下来的字典哦!
原来问题就出在这里!如果用日语进行翻译,输出的索引值就会变成out,而不是我们之前用的word_mean。
那么我们再试一下英语:
英语翻译成中文,是word_mean,我们再试一下别的语言:
可以看到,我们输入了一句西班牙语哈:
但是自动识别给我们识别成了en,也就是英语,说明这个自动识别也不怎么可靠嘛~
所以我们还是进行手动的录入语种,比如西班牙语就是:
当然这里我们不管那么多,先只实现英译汉,和汉译英!
目标明确,也就是说我们要先写一个判断:判断用户是要汉译英,还是英译汉。
怎么写呢,不会写吗,好吧,让你抄作业好了(๑´ㅂ`๑)
if __name__ == '__main__':
# 用于输入需求
how = input('英译汉/汉译英(0/1):')
if how == '0':
fanyi('en','zh')
elif how == '1':
fanyi('zh','en')
else:
print('请输入正确的数字!')
如果想再人性化一些,比如加个是否需要继续翻译,要怎么做呢?
第一步:死循环!
if __name__ == '__main__':
while True:
# 用于输入需求
how = input('英译汉/汉译英(0/1):')
if how == '0':
fanyi('en','zh')
elif how == '1':
fanyi('zh','en')
else:
print('请输入正确的数字!')
死循环有了,现在的效果就是我们翻译完了一个,就会又让我们继续翻译,所以我们要设置一个退出的选项:break。
(〃‘▽’〃)
if __name__ == '__main__':
while True:
# 用于输入需求
how = input('英译汉/汉译英(0/1):')
if how == '0':
fanyi('en','zh')
ranhou = input('是否继续翻译?(0/1):')
if ranhou == '1':
break
elif how == '1':
fanyi('zh','en')
ranhou = input('是否继续翻译?(0/1):')
if ranhou == '1':
break
else:
print('请输入正确的数字!')
然后我们就会发现,如果继续翻译了,就会又回到最初始的界面,这很笨,不好。
那么我们该怎么办呢?弄复杂一点呗,多判断一下呗。
 ̄へ ̄
程序员,就是受苦受累的!我们要悄悄地掉头发,然后在人群中闪瞎所有人!
import sys
if __name__ == '__main__':
while True:
# 用于输入需求
how = input('英译汉/汉译英(0/1):')
print('*'*50)
if how == '0':
fanyi('en','zh')
print('*' * 50)
while True:
ranhou = input('继续当前翻译/回到主界面/退出(0/1/2):')
print('*' * 50)
if ranhou == '0':
fanyi('en','zh')
print('*' * 50)
elif ranhou == '1':
break
else:
sys.exit()
elif how == '1':
fanyi('zh','en')
print('*' * 50)
while True:
ranhou = input('继续当前翻译/回到主界面/退出(0/1/2):')
print('*' * 50)
if ranhou == '0':
fanyi('zh', 'en')
print('*' * 50)
elif ranhou == '1':
break
else:
sys.exit()
else:
print('请输入正确的数字!')
当然,也可以加点花样,让界面更好看一点,做一个讲究的程序员!
由于上述代码都是基础类的,所以就不一一注释了,如果需要解答可以留言哦!
效果棒棒哒!
(`・ω・´)
那么剩下要解决的一个问题就是怎么把:
这个烦人的东西给简化喽!
众所周知,这两种输出不是out就是world_mean,大不了就出错呗,两个都要!
也省的想那么多,hhh
这里就要用到我们的try和except组合啦,来,让我们 解 除 封 印 !
跑到我们的翻译方法函数里面去,把try和except先写上喽!
直接把我们原本用的复制到try里面,再把另外一种写到except里面,很简单吧很简单吧很简单吧,如果哪里不懂的话,一定一定要问,不要迷迷糊糊就过去了,打好基础才能做好后面的一切,基础真的真的很重要!!
成果
这里我们在外面已经做了界面的一些修饰,所以把两条横线去掉,大功告成!来试一下吧:
成功达到了一个…比之前要好的效果!
当然最后的欢迎使用是判断退出的时候加上的,应该是谢谢使用哈~
点进来看一看(勾引)
可能有些小伙伴要说了,你明明在划水,演都不带演的!
真的是冤枉啊!!!
是有很多很多小伙伴私信或者加了群跟小泽说这类的问题,所以小泽才想做一期详细讲解的,也方便有一些基础不是很牢固的小伙伴听讲对叭!!
(`・ω・´)
你问群?
从之前的3个人,已经壮大到现在的25个人啦,在这里你想问的问题都可以问,说不定还可以参与到一些实践的项目里,只要你有一颗学徒的心,就能加进来!
没广告,没卖课,没收费资源!有的只是一群单身汉而已!!真的!!!
当然还有的小伙伴说对异步这一块不是很了解,所以下一期就准备做异步的更详细讲解,还有更多案例哦!!
如果想看的话,就快点赞吧~
唉…求求你们不要光关注不点赞了,小泽还是比较喜欢点赞,hhh
老规矩,400赞更下一期!
200多粉丝呢,不会达不到吧,不会把不会吧~
(`・ω・´)
如果喜欢的话,点个赞最好点个关注加个群啥的,大家一起学习交流,如果觉得对你有帮助了,那就太好了!
各位兄弟姐妹早点睡觉,来日再见,溜了。
(`・ω・´)