上一篇博客中我们有提到,经过python爬虫去爬取服务器端的代码可能会被服务器阻拦,所以,我们要有措施来应对阻碍我们前进的障碍。
当我们用python访问的时候,hearder中的User-Agent会显示python+版本号,我们可以通过修改它的值来达到隐藏的效果。
在python爬虫基础一的博客中我们谈到爬取有道翻译的过程,在这个例子中我们加入隐藏字段:
head = {}
head['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
其中,User-Agent的内容即网页中的User-Agent,这样修改之后的结果并没有变化,但我们在爬取服务器时可以隐藏代码访问的痕迹。
还有一种方法,使用add_header将User-Agent的内容追加进去。
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/65.0.3325.181 Safari/537.36")
完整代码如下:
import json
import urllib.request
import urllib.parse
content = input('请输入需要翻译的内容:')
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/65.0.3325.181 Safari/537.36"
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client']= 'fanyideskweb'
data['salt'] = '1522810548560'
data['sign'] = '1c3052fed220e88ca910ac44dedd91ea'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_REALTIME'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')
#req = urllib.request.Request(url,data,head)
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/65.0.3325.181 Safari/537.36")
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
#print(html)
target = json.loads(html)
print('翻译结果 %s' % (target['translateResult'][0][0]['tgt']))
当我们使用爬虫爬取网页图片的时候,服务器可以通过记录每个IP地址的访问频率来判断是否四爬虫,因此我们需要来模拟是正常人类在访问。有两种方法,一种是延迟访问时间,一种是使用代理。
第一种,引入time模块,使用sleep函数。
time.sleep(2)
但是延时处理的弊端就是会比较慢,我们也可以使用代理:
1,参数是一个字典{‘类型’:‘代理IP:端口号’}
proxy_support = urllib.request.ProxyHandler({})
2,定制创建一个opener
opener = urllib.request.build_opener(proxy_support)
3,a,安装opener(一劳永逸)
urllib.request.install_opener(opener)
b,调用opener(方便一时使用)
opener.open(url)
import urllib.request
url = "http://www.whatismyip.com.tw"
proxy_support = urllib.request.ProxyHandler({'http':'58.240.53.196:8080'})
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)
这里有很详细的一篇关于爬取妹子图的博客
戳链接写给小白看的爬虫系列之爬虫入门爬取妹子图