import requests
1、requests库有两个对象,Request对象和Response对象,下表是Response对象的属性
属性 | 说明 |
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.enconding | 从HTTPheader中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
2、requests库异常
异常 | 说明 |
requests.ConnectionError | 网络连接错误异常,如DNS查询失败,拒绝连接 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
3、get()函数,获取html网页的主要方法,对应HTTP的GET,requests.get(url,params=None,**kwargs) url是链接地址,params是url中的额外参数,字典或字节流格式,可选。**kwargs,十二个控制访问的参数。
#通用爬取框架
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()#如果不是200,引发HTTPError异常
r.encoding=r.apparent_encoding
return r.text
except:
return "产生异常"
4、params字段:字典或字节序列,作为参数增加到url中,下面的例子可作为手工组成百度搜索的url
import requests
payload = {'wd': '中国', 'rn': '100'}#wd是搜索词,rn是搜索结果数量
r = requests.get("http://www.baidu.com/s", params=payload)
print一下的话,你会发现
>>> print(r.url)
http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD&rn=100
5.模拟浏览器访问
import requests
url="http://www.baidu.com"
try:
kv={'user-agent':'Mozilla/5.0'}
r=requests.get(url,headers=kv)
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失败")
6、爬取图片
import requests
import os
#爬取的图片是两头狼
url="http://image.nationalgeographic.com.cn/2017/0211/20170211061910157.jpg"
keyword='程序猿'
root="E:/web_spider/"
path=root+url.split('/')[-1]
kv={'user-agent':'Mozilla/5.0'}
kd={'wd':keyword}
try:
# r=requests.get(url,params=kd,headers=kv)
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r=requests.get(url,headers=kv)
r.raise_for_status()
with open(path,'wb') as f:
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已经存在")
except:
print("爬取失败")
注:参考资源来自中国大学mooc《Python网络爬虫与信息提取》