1/
我相信,大家既然想学python,那必然对爬虫有一定的了解,
爬虫,是一门技术,大多数编程语言都能写爬虫。但是,为什么这么多人会选择学习python来写爬虫程序呢?python的魅力就来了,大家用Java,用c写一份爬虫,可能需要几百行代码,但是用python可能就几十行甚至十几行就解决了。为什么呢?因为python有很多库。那么我们的起点就是在巨人的肩膀上往上爬。那必然是轻松了很多。
今天给大家先介绍一个爬虫用到的一个模块 requests库
requests库的介绍
requests是python中的第三方库,他是基于urllib,在比其他编程语言编写爬虫时,可以节约我们大量的工作,完全满足HTTP测试需求。
requests库的安装
安装requests库不着重介绍
pip install requests
安装完requests库之后就能正常使用,导入了。
requests.get()方法
requests.get()是获取HTML网页的主要方法,对应于HTTP的GET
在编写代码时,是近乎是最不可或缺的一方法。
下面为示例:
import requests
r = requests.get('http://www.baidu.com') # 获取url网址
print(r.status_code) # 查看访问的状况200为正常404失败
print(r.text) # 打印获取到的源代码
r.encoding = "utf8" # 编码方式改为utf8
print(r.text)
我相信通过此代码,大家对requests.get()方法有一定的了解.
respose对象的属性
r.status_code
r.status_code在上文的代码中,也对其有一定的了解.。r.status_code是HTTP请求的反回状态,200表示连接成功,404表示失败
r.text
r.text是HTTP响应内容的字符串形式,既,url对应的页面内容
r.encoding
r.encoding是从HTTP header中猜测的响应内容编码方式。//若不更改,在访问一些网页时会出现中文乱码。
r.apparent_encoding
r.apparent_encoding是从内容中分析出的响应内容编码方式(备选编码方式)
r.content
r.content是HTTP响应内容的二进制形式。在网页中,存储图片、音频、视频等就是用二进制形式存储的。这个属性通常用于爬取这些资源。
requests库的异常
requests.ConnectionError 为网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError 为HTTP错误异常
requests.URLRequired 为URL缺失异常
requests.TooManyRedirects 为超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 为连接远程服务器超时异常
requests.Timeout 为请求URL超时,产生超时异常
爬取网页的通用代码框架
import requests
# 爬取原代码函数
def getHTMLText(url):
try:
r = requests.get(url,timeout = 30) # 访问url
r.raise_for_status() # 查看访问状态,看看200为成功 404失败
r.encoding = r.apparent_encoding # 编码方式改为分析来到编码方式
return r.text
except:
return "产生异常"
if __name__ == '__main__':
url = "http://www.python123.io"
text = getHTMLText(url)
print(text)
requests.request(method,url,**kwargs)
其中**kwargs:控制访问的参数,均为可选项
params: 字典或字节序列,作为参数添加到url中
data :字典、字节序列或者文件对象,作为Request内容
json :JSON格式的数据,作为Request的内容
kv = {'key1':'value1'}
r = requests.request('POST','http://www.baidu.com',json = kv)
headers :字典,HTTP定制头
cookies : 字典或CookieJar,Request中的cookie
auth :元组,支持HTTP认证功能
files:字典类型、传输文件
timeout :设定超时时间,秒为单位
proxies : 字典类型,设定访问代理服务器,可以增加登录认证
pxs = {'http':'http://user:[email protected]:1234',
'https':'https//10.10.10.1:4321'}
r = requests.request('GET','http://www.baidu.com',proxies = pxs)
allow_redirects : True/False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify : True/False ,默认为True,认证SSL证书开关
cert:本地SSL证书路径
全代码
import requestsb
url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
kv = {'user-agent' : 'Mozilla/5.0'}
r = requests.get(url,headers=kv)
r.raise_for_status() # 当访问状态不是200时会抛出异常
r.encoding = r.apparent_encoding
print(r.text[1000:2000])
except:
print("爬取失败")
百度搜索全代码
import requests
keyword = "python"
try:
kv = {'wd',keyword}
r = requests.get("http://www.baidu.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print('爬取失败')
图片爬取全代码
import requests
import os
# 1.获取url
def getImage(url, root):
path =root + url.split("/")[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
r.encoding = r.apparent_encoding
print(r.encoding)
print(r.status_code)
print(r.headers)
with open(path,'wb') as f:
f.write(r.content)
f.close()
print("保存成功")
except:
print("产生错误了")
if __name__ == '__main__':
url1 = 'https://img-pre.ivsky.com/img/bizhi/pre/201911/20/love_live.jpg'
root = 'D://pics//'
getImage(url1,root)
爬取图片的源代码,也可以用来爬取音频,视频等
IP地址查询全代码
import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
r = requests.get(url+'192.168.30.100')
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-500:])
except:
print("爬取失败")
通过此文章,我相信,大家对python中的requests库有了一定的了解,后续会给大家进一步的完善其python爬虫知识。beautifulsoup等模块