python 爬虫——有道翻译

一、网页解析

打开有道翻译官网:
python 爬虫——有道翻译_第1张图片通过F12,找到网络一栏,寻找”POST”请求,并在“消息头”下找到请求网址,即翻译的原网址 :
python 爬虫——有道翻译_第2张图片观察“参数”一栏,在“数据表单”中找到了输入的字符串赋值给了参数“i”:
python 爬虫——有道翻译_第3张图片
观察“响应”一栏,在“响应载荷”中找到了输出的字符串:
python 爬虫——有道翻译_第4张图片
此处为字典格式,在代码分析中将对其进行解析。

在“消息头”的“请求头”中找到“User-Agent”:

python 爬虫——有道翻译_第5张图片
不同设备对这一段的代码都不同,所以针对自己的设备,复制下这一段代码,用于后续代码编写,这是网站判断是否为爬虫的一个依据。

二、代码解析

  • urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。
  • urllib.parse对URL进行操作,例如解析或者创建URL。解析Parsing使用urlparse()函数解析URL,返回的是一个ParseResult对象。
  • JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。
  • time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数。

1. 输入参数:

python 爬虫——有道翻译_第6张图片
针对表单数据进行编写,可加入输入提示,并将输入的值赋值给参数“i”:
python 爬虫——有道翻译_第7张图片

2. 输出

在这里插入图片描述
层层解析字典:
python 爬虫——有道翻译_第8张图片
通过输出不断测试解析结果,得到最终翻译结果:
python 爬虫——有道翻译_第9张图片

3. 反爬虫

3.1 隐藏爬虫信息

python 爬虫——有道翻译_第10张图片
粘贴之前复制的“User-Agent”,以此避开网站第一步爬虫检索:
在这里插入图片描述

3.2 设置时间间隔

此处设置时间间隔,模拟人工操作,避开爬虫检索:
在这里插入图片描述

3.3 获取后台url

python 爬虫——有道翻译_第11张图片连接后台url,避开网页展示网址:
python 爬虫——有道翻译_第12张图片

三、结果展示

python 爬虫——有道翻译_第13张图片
可见实验是成功的,完成了中英文之间的翻译。

四、代码展示

'''爬虫有道词典'''

import urllib.request
import urllib.parse
import json                                                                                     
import time

while True:
    content=input('请输入需要翻译的内容(输入“ql”退出程序):')
    if content=='ql':
        break
    
    	#获取后台url
	    url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'	

    head={
     }
    #隐藏爬虫信息
    head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0' 

	#编辑表单
    data={
     }                                                                                  
    data['i']=content
    data['from']='AUTO'
    data['to']='AUTO'
    data['smartresult']='dict'
    data['client']='fanyideskweb'
    data['salt']='15590456742344'
    data['sign']='238073a9cc158731f9feea2f63589c3f'
    data['ts']='1559045674234'
    data['bv']='e2a78ed30c66e16a857c5b6486a1d326'
    data['doctype']='json'
    data['version']='2.1'
    data['keyfrom']='fanyi.web'
    data['action']='FY_BY_CLICKBUTTION'

	#确认新表单
    data=urllib.parse.urlencode(data).encode('utf-8')                                                   

	#传入url和data
    req=urllib.request.Request(url,data,head)                                                           

	#获得响应
    response=urllib.request.urlopen(url,data)                                                           
    html=response.read().decode('utf-8')
    '''
    print(html)
    
    target=json.loads(html)
    print(target)

    print(target['translateResult'])

    print(target['translateResult'][0][0])

    print(target['translateResult'][0][0]['tgt'])
    '''
    target=json.loads(html)

	#获取结果
    print('翻译结果:%s'%(target['translateResult'][0][0]['tgt']))                                       

	#设置间隔时间
    time.sleep(5)                                                                                       


你可能感兴趣的:(Python)