爬虫对信息的访问速度高出常人很多,所以服务器如果监测到速度超过一个固定的阈值,就会让用户输入验证码,所以要限制访问速度,方法有两个
第一,利用time模块
import urllib.request
import urllib.parse
import json
import time
while True:
contend=input('请输入 需要翻译的内容:(输入‘q’则是退出程序)')
if contend=='q!':
break
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#隐藏的第一种方法
#head={}
#head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
#隐藏的第二种方法
data={}
data['i']=contend
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1538989442643'
data['sign']='40954ebe6d906735813c2cd7c2274733'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CLICKBUTTION'
data['typoResult']='false'
#利用urlencode把它编码成url的形式
data=urllib.parse.urlencode(data).encode('utf-8')
req=urllib.request.Request(url,data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')
response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
target=json.loads(html)
print('翻译结果:%s'%(target['translateResult'][0][0]['tgt']))
time.sleep(5)
运行结果:每隔五秒翻译一次
第二,利用代理,代理就是它把自己访问到的信息都反馈给你,这样服务器检测到的是代理的ip地址,不是你的。
1.参数是一个字典{‘类型’:‘代理ip:端口号’}
proxy_support=urllib.request.ProxyHandler({})
2.定制、创建一个opener
opener=urllib.request.bulid_opener(proxy_support)
3,安装opener
urllib.request.install_opener(url)
4.打开opener
opener.open(url)
具体实现步骤:在浏览器搜索‘代理ip’-找到代理ip,http://www.whatismyip.com.tw访问这个地址就知道你所搜到的ip是什么类型
代码:
import urllib.request
import random
url='http://www.whatismyip.com.tw'
iplist=['119.6.144.73:81','183.203.208.166:8118','111.1.32.28:81']
proxy_support=urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
response=urllib.request.urlopen(url)
html=response.read().decode('utf-8')
print(html)