爬虫在运动的过程中,很多时候都会遇到这样或那样的异常。如果没有异常处理,爬虫遇到异常时就会直接崩溃停止运行,下次再次运行时,又会重头开始。
常见状态码及含义
301 Moved Permanently : 重定向到新的URL,永久性
302 Found :重定向到临时的URL,非永久性
304 Not Modified : 请求的资源未更新
400 Bad Request : 非法请求
401 Unauthorized : 请求未经授权
403 Forbidden : 禁止访问
404 Not Found : 没有找到对应页面
500 Internal Server Error : 服务器内部出现错误
501 Not Implemented : 服务器不支持实现请求所需要的功能
URLError与HTTPError
两者都是一场处理的类,HTTPError是URLError的子类。
···
异常处理
'''
URLError出现的原因:
1)连不上服务器
2)远程url不存在
3)无网络
4)触发HTTPError
'''
import urllib.request
import urllib.error
try:
urllib.request.urlopen("http://blog.csdn.net")
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
···
爬虫的浏览器伪装技术
浏览器伪装技术
#浏览器伪装
import urllib.request
url="http://blog.csdn.net"
#头文件格式header=("User-Agent",具体用户代理值)
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
data=opener.open(url).read()
fh=open("E:/python/python爬虫/ua.html","wb")
fh.write(data)
fh.close()
# 需要研究的问题
# 1、如何将opener安装为全局,让urlopen()访问时也添加对应报头?
# 2、研究一下使用Request的方式进行报头添加。
网友评论