爬虫2--隐藏爬虫
当爬虫不断地去访问服务器时,服务器会很有压力。一般服务器查看远程的client是否是代码操作时,一般通过查看User-Agent。因此,我们可以通过修改爬虫的User-Agent,使得服务器认为我们是人为在访问网页。
两种方式设置User-Agent,
1. urllib.request.
Request
(url, data, headers)
2.先生成request: request = urllib.request.
Request
(url, data)
为request添加agent: request.add_header(key,val)
代码如下:
import urllib.request
import urllib.parse
import json
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=https://www.baidu.com/link'
'''
head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
'''
data = {}
data['i']='我喜欢读书'
data['from']='zh-CHS'
data['to'] = 'en'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1499949940718'
data['sign']='f00c85b959fe71422bcff90bf9b88afe'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CL1CKBUTTON'
data['typoResult']='true'
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url,data,head)
print(request.headers)
response = urllib.request.urlopen(url, data)
html = response.read().decode('utf-8')
result = json.loads(html)
print(result['smartResult']['entries'])
1.程序每隔一段时间再爬取数据
2.为爬虫设置代理服务器
代理帮忙访问网址,然后把看到的东西返回给我们。因为服务器看到的是代理的地址,而不是真正要请求的地址,如果用多个代理去访问应该是可行的。
使用代理步骤:
a. 参数是一个字典{'类型‘:’代理ip:端口号‘}
proxy_support = urllib.request.ProxyHandler({})
类型可以是http,https等protocol
b. 定制/创建一个opener
opener = urllib.request.build_opener(proxy_support)
opener可以看作是私人定制,当使用urlopen打开一个特定网页的时候,其实已经在使用一个默认的openenr来工作了。opener是可以定制的,比如我们可以给他加上特殊的headers,指定相关的代理,使用这个代理ip去做相应的访问
c.1安装opener
urllib.request.install_opener(opener)
这个方法可以把opener安装到系统中,这是个一劳永逸的做法,因为之后只要使用urlopen函数,就会使用这个定制好的opener
如果不想永远使用这个opener,而只是必要的情况下需要这个opener,此时可以c2
c2. 调用opener:
opener.open(url) #表示这个特定的url使用这个定制的opener,别的url使用默认opener,不受这个opener的影响