使用自己的IP频繁访问一个网站,总会让自己觉得不安,并且该网站的管理人员也不希望看到这样频繁的同一个的IP访问,因此为了使我们双方和谐一点,通常第一步的做法就是在你的程序中加入延迟time.sleep(5)。但是正常来说,同一个ip不能短时间内重复访问同一网站,因此我们就想把自己伪装成别的ip,因此使用代理ip并且加上延时,总之注意爬取的规范性,不然给服务器带来太大压力,服务器会直接把你block,禁止你的访问的。
一般百度“代理ip”即可,代理ip的网站一般都会提供一些免费的IP,这样对于学习者来说已经足够了,当然希望更加稳定便捷的代理用于商业用途的,可以选择收费代理,这里以这个网站举例:
http://www.66ip.cn/
我们随便选择其中一个:125.37.179.143:8080,注意不要忘记端口号哦。
ok,现在选择一个网站来查看自己的本机IP,这个网站尽量可读性高一些,推荐这个网站:
http://www.whatismyip.com.tw/
包括两部分程序,第一个是ip代理,第二个是使用ip代理进行网页访问
(1)调用request.ProxyHandler(proxy),proxy参数为一个字典,这个字典就是我们所使用的代理ip:{‘http’: ‘125.37.179.143:8080’}
(2)创建Opener(类似于urlopen,这个代开方式是我们自己定制的)
request.build_opener(proxy_support)
(3)加入用户代理User Angent,这一步是为了稳定访问,不管是不是使用代理ip都需要
(3)安装Opener
request.install_opener(opener)
使用install_opener方法之后,会将程序默认的urlopen方法替换掉。也就是说,如果使用install_opener之后,在该文件中,再次调用urlopen会使用自己创建好的opener。如果不想替换掉,只是想临时使用一下,可以使用opener.open(url),这样就不会对程序默认的urlopen有影响。
from urllib import request
def ip_proxy():
# 这是代理IP
proxy = {'http': '125.37.179.143:8080'}
# 创建ProxyHandler
proxy_support = request.ProxyHandler(proxy)
# 创建Opener
opener = request.build_opener(proxy_support)
# 添加User Angent
opener.addheaders = [('User-Agent','User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36')]
# 安装OPener
request.install_opener(opener)
这里只是省略了添加用户代理部分,其他与爬取豆瓣电影信息那篇博客一样,代码如下:
def OPener_URL(url):
try:
response = request.urlopen(url)
# 读取相应信息并解码
html = response.read().decode("utf-8")
print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
首先极其不稳定,访问http协议的网站总是超时,或者被远程拒绝,可以尝试科学上网。
另外注意访问网站要写成
url = 'http://www.whatismyip.com.tw'
而不要复制粘贴成这样
url = 'http://www.whatismyip.com.tw/'
多这一个‘/’是非常的坑啊
还需要继续总结学习,待续。。。
尽量不要使用校园网,可以使用自己的宽带,或者连接手机开启的热点,成功率会高一些