写在前面的话 :上一篇文章我们了解了urllib库的基本使用方法,现在那是迫不及待的想要开始打码呀,我们就从最简单的入手吧,编写一个有道翻译的接口
温馨提示 :博主使用的系统为win10,使用的python版本为3.6.5
一、网页分析
首先我们需要使用浏览器对网站进行分析,博主这里使用的浏览器为Chrome浏览器,用Chrome浏览器打开有道翻译,然后使用其自带的开发者工具的Network选项卡进行抓包分析
在输入框中输入文字(这里实例就输入“爬虫”好了),可以看到出现了很多请求,然后我们选择XHR进行过滤,发现只有一个请求符合要求,那么明显这个请求就是我们需要抓的包
分析该请求的Headers选项卡,我们需要关注以下几个方面:
Request URL:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
可是当我们直接打开这个网址的时候,却发现返回的是:{“errorCode”:50},额,好吧,看来是我们的接口找错了,然后我们尝试着把不必要的参数去掉,只留下了 http://fanyi.youdao.com/translate_o,再打开网址发现还是显示{“errorCode”:50},最后把看起来不太友好的_o也去掉了,只剩下 http://fanyi.youdao.com/translate,这下子终于找对了吧Request Method:POST(POST请求的请求参数包含在Form Data数据中)
Request Headers
- User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Form Data(这里需要根据实际情况进行筛选,只留下必要的)
- i:爬虫,这里就是翻译的主体内容了
- doctype:json,指定返回数据的格式
- from:AUTO
- to:AUTO
分析该请求的响应,即选项卡Response,发现返回的是一个Json格式的数据,所以我们需要导入json模块对返回的数据进行分析处理,把我们需要的翻译结果提取出来
二、编码实现
好了,分析完成了,下面就开始敲代码了(简简单单的二十多行代码就可以完成了)
import urllib.request
import urllib.parse
import json
#把接口封装成一个函数
def translate(content):
#考虑特殊情况
if content == "" :
return ""
#起始URL
url = "http://fanyi.youdao.com/translate"
#构造POST请求的Form Data
params = {
'i':content,
'doctype':'json',
'from':'AUTO'
'to''AUTO'
}
data = urllib.parse.urlencode(params).encode('utf-8')
#构造Request Headers
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
#构造Request对象
req = urllib.request.Request(url,data=data,headers=headers,method='POST')
#发送请求,得到响应
response = urllib.request.urlopen(req)
#解析数据
result = json.loads(response.read().decode('utf-8'))
return result['translateResult'][0][0]['tgt']
if __name__ == "__main__":
print('请输入翻译内容,输入"quit"退出')
while(True):
content = input('翻译内容:')
if(content == 'quit'):
break
result = translate(content)
print("翻译结果:%s" % result)
写在后面的话 :这篇文章我们简单的应用urllib实现了有道翻译的接口,但是想要深入爬虫,学习一些网页解析的方法肯定是必须的,所以下一篇文章我们将了解一下Python中re模块的基本使用方法,谢谢大家