python爬虫基础二

上一篇博客中我们有提到,经过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)

这里有很详细的一篇关于爬取妹子图的博客
戳链接写给小白看的爬虫系列之爬虫入门爬取妹子图

你可能感兴趣的:(python)