在之前两篇文章中已经为大家介绍了urllib模块的基础知识及使用方法,本次文章将介绍发送请求,爬虫的异常处理和伪装浏览器三个部分的知识。
1、发送请求
以百度检索为例:https://www.baidu.com/s?wd=python&ie=UTF-8
wd=检索内容
import urllib.request
keywd='python' #假如我们要检索python
url='http://www.baidu.com/s?wd='+keywd
req=urllib.request.Request(url)
data=urllib.request.urlopen(req).read()
file=open('D:/1python/http模拟.html','wb') #生成一个本地文件
file.write(data) #将爬取的网页写入本地文件
file.close()
如果检索内容为中文,还需进行编码操作
key='编程'
key=urllib.request.quote(key) #quote可对中文进行编码
url='http://www.baidu.com/s?wd='+key
2、爬虫的异常处理
在爬虫过程中我们经常会遇到异常情况,若没有异常处理,易产生中断,使后续程序无法运行。在这里为大家简单介绍一下HTTPError和URLError:
HTTPError是URLError的子类,我们在进行异常捕捉时只要捕获URLError即可,但URLError是无状态码,无法捕获具体的异常状态,接下来会给大家展示如何对URLError进行处理,使得它可以显示具体的错误内容。
import urllib.error
import urllib.request
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)
3、伪装浏览器
在爬虫过程中,若被网站识别出是爬虫程序,有可能会拒绝访问,此时我们需要将自己伪装成浏览器对网站进行访问。
import urllib.request
url='http://blog.csdn.net/http://my.csdn.net/weiwei_pig'
#F12 network 刷新 request headers
header=('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')
opener=urllib.request.build_opener() #添加报头信息
opener.addheaders=[header]
urllib.request.install_opener(opener) #安装为全局,如此下面爬取时会自动加入报头
data=opener.open(url).read()
file=open('D:/1python/1.html','wb')
file.write(data)
file.close()
——来自韦玮老师课堂笔记及所悟